没用过Json,今天调用API返还数据是Unicode码,才反应过来API返还的Json数据,一路百度,奈何技术太差搞半天才搞明白,到底应该怎么解析Json
自己记录一下,应该怎么操作
首先推荐使用JSON在线解析及格式化验证 - JSON.cn或JSON 在线解析 | 菜鸟工具来查看我们要解析的Json数据
首先我们先解析一个简单的Json文本:{"from":"zh","to":"en","trans_result":[{"src":"CHINA","dst":"中国"}]}
当Json为字符串样式时我们很难看明白它是啥
当我们把他们打开
{
"from":"zh",
"to":"en",
"trans_result":[
{
"src":"CHINA",
"dst":"中国"
}
]
}
使用解析工具在线解析后更加直观 还显示了那些为Object 那些为Array
通过上面的解析我们知道了那些是Object那些是Array后,用Json解析库也就更加简单了
这里我用的是Fistjson
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
- 先下载Fistjson的jar包 Fastjson 中文 Wiki
- 再将jar包复制到需要使用json的工程中
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) {
//要解析的字符串 \u 是Unicode码
//这里很多 \ 是为了转义 "
String strJson = " {\"from\":\"en\",\"to\":\"zh\",\"trans_result\":[{\"src\":\"CHINA\",\"dst\":\"\u4e2d\u56fd\"}]}";
System.out.println(str);
//将Json字符串转换为json对象
JSONObject jsObjectmain = JSON.parseObject(strJson);
//在json对象中我们可以通过KEY获取value值
System.out.println(jsObjectmain.getString("from"));
//因为trans_result的value值是一个array类型(它下面的value值不唯一);
//所以用JSONArray 来储存 trans_result的value值;
//通过上面在线解析的图也可以看出那些是object那些是array
JSONArray jsonArray = jsObjectmain.getJSONArray("trans_result");
//通过JSONArray 获取它下面的 JSONObject 和数组一样index值从0开始
JSONObject jsobject = jsonArray.getJSONObject(0);
//和最开始一样通过key 获取 value
System.out.println(jsobject.getString("src"));
//经过解析发现Unicode码也成功还原
}
}