一、简单来说,json结构大致有以下
“key”:“value” --> 此时value为String
“key":0 --> 此时value为int
“key”:{“k1”:“v1”} --> 此时value为JSONObject
“key”:[v] -->此时value为JSONArray
以下举例数据结构:
{
"error": 0,
"status": "success",
"results": [
{
"currentCity": "青岛",
"index": [
{
"title": "穿衣",
"zs": "较冷",
"tipt": "穿衣指数",
"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
},
{
"title": "紫外线强度",
"zs": "中等",
"tipt": "紫外线强度指数",
"des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
}
]
}
]
}
json解析代码:
public class Test {
public static void main(String[] args) {
String s = "{\"error\":0,\"status\":\"success\",\"results\":[{\"currentCity\":\"青岛\",\"index\":[{\"title\":\"穿衣\",\"zs\":\"较冷\",\"tipt\":\"穿衣指数\",\"des\":\"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。\"},{\"title\":\"紫外线强度\",\"zs\":\"最弱\",\"tipt\":\"紫外线强度指数\",\"des\":\"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。\"}],}]}";
JSONObject jsonObject = (s);
//提取出error为 0
int error = ("error");
("error:" + error);
//提取出status为 success
String status = ("status");
("status:" + status);
//注意:results中的内容带有中括号[],所以要转化为JSONArray类型的对象
JSONArray result = ("results");
for (int i = 0; i < (); i++) {
//提取出currentCity为 青岛
String currentCity = (i).getString("currentCity");
("currentCity:" + currentCity);
//注意:index中的内容带有中括号[],所以要转化为JSONArray类型的对象
JSONArray index = (i).getJSONArray("index");
for (int j = 0; j < (); j++) {
String title = (j).getString("title");
("title:" + title);
String zs = (j).getString("zs");
("zs:" + zs);
String tipt = (j).getString("tipt");
("tipt:" + tipt);
String des = (j).getString("des");
("des:" + des);
}
}
}
}
二、使用FastJson对JSON字符串、JSON对象及JavaBean之间的相互转换
常用类和方法
在fastjson 2.0中,package和不一样,是.fastjson2。如果你之前用的是fastjson1,大多数情况直接更包名就即可。
package .fastjson2;
class JSON {
// 将字符串解析成JSONObject
static JSONObject parseObject(String str);
// 将字符串解析成JSONArray
static JSONArray parseArray(String str);
// 将字符串解析成Java对象
static T parseObject(byte[] utf8Bytes, Class<T> objectClass);
// 将Java对象输出成字符串
static String toJSONString(Object object);
// 将Java对象输出成UT8编码的byte[]
static byte[] toJSONBytes(Object object);
}
class JSONB {
// 将jsonb格式的byte[]解析成Java对象
static T parseObject(byte[] jsonbBytes, Class<T> objectClass);
// 将Java对象输出成jsonb格式的byte[]
static byte[] toBytes(Object object);
}
class JSONObject {
Object get(String key);
int getIntValue(String key);
Integer getInteger(String key);
long getLongValue(String key);
Long getLong(String key);
T getObject(String key, Class<T> objectClass);
// 将JSONObject对象转换为Java对象
T toJavaObject(Class<T> objectClass);
}
class JSONArray {
Object get(int index);
int getIntValue(int index);
Integer getInteger(int index);
long getLongValue(int index);
Long getLong(int index);
T getObject(int index, Class<T> objectClass);
}
class JSONPath {
// 构造JSONPath
static JSONPath of(String path);
// 根据path直接解析输入,会部分解析优化,不会全部解析
Object extract(JSONReader jsonReader);
// 根据path对对象求值
Object eval(Object rootObject);
}
class JSONReader {
// 构造基于String输入的JSONReader
static JSONReader of(String str);
// 构造基于ut8编码byte数组输入的JSONReader
static JSONReader of(byte[] utf8Bytes);
// 构造基于char[]输入的JSONReader
static JSONReader of(char[] chars);
// 构造基于json格式byte数组输入的JSONReader
static JSONReader ofJSONB(byte[] jsonbBytes)
}
读取JSON对象
String str = "{\"id\":123}";
JSONObject jsonObject = (str);
int id = ("id");
String str = "[\"id\", 123]";
JSONArray jsonArray = (str);
String name = (0);
int id = (1);
将JavaBean对象生成JSON
将JavaBean对象生成JSON格式的字符串
class Product {
public int id;
public String name;
}
Product product = new Product();
= 1001;
= "DataWorks";
(product);
// 生成如下的结果
{
"id" : 1001,
"name" : "DataWorks"
}
(product, );
// 生成如下的结果
[123, "DataWorks"]
将JavaBean对象生成UTF8编码的byte[]
Product product = ...;
byte[] utf8JSONBytes = (product);
将JavaBean对象生成JSONB格式的byte[]
Product product = ...;
byte[] jsonbBytes = (product);
byte[] jsonbBytes = (product, );
读取JavaBean
将字符串读取成JavaBean
将UTF8编码的byte[]读取成JavaBean
byte[] utf8Bytes ="{\"id\":123}".getBytes(StandardCharsets.UTF_8);Product product = (utf8Bytes,);12
将JSONB数据读取成JavaBean
byte[] jsonbBytes =...Product product = (jsonbBytes,);Product product = (jsonbBytes,,);123
使用JSONPath
使用JSONPath部分读取数据
String str =...;JSONPath path =("$.id");// 缓存起来重复使用能提升性能JSONReader parser =(str);Object result = (parser);1234
使用JSONPath读取部分utf8Bytes的数据
byte[] utf8Bytes =...;JSONPath path =("$.id");// 缓存起来重复使用能提升性能JSONReader parser =(utf8Bytes);Object result = (parser);1234
使用JSONPath读取部分jsonbBytes的数据
byte[] jsonbBytes =...;
JSONPath path =("$.id");// 缓存起来重复使用能提升性能JSONReader parser =(jsonbBytes);// 注意,这是利用ofJSONB方法