Java解析JSON数据
使用第三方库com.alibaba.fastjson解析,依赖包
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.3</version>
- </dependency>
Json的类型
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
Java解析Json对象
json模板数据
- {
- "person": {
- "id": "123",
- "name": "name",
- "address": "address"
- }
- }
使用
- jsonObject.getJSONObject
使用第三方库,解析代码如下:
- @Test
- public void testJsonObject(){
- String jsonString = "{\n" +
- " \"person\":{\n" +
- " \"id\":\"123\",\n" +
- " \"name\":\"name\",\n" +
- " \"address\":\"address\"\n" +
- " }\n" +
- "}";
- try {
- JSONObject jsonObject = JSONObject.parseObject(jsonString);
- JSONObject personObject = jsonObject.getJSONObject("person");
- if(personObject!=null){
- Person person = new Person();
- person.setId(personObject.getString("id"));
- person.setName(personObject.getString("name"));
- person.setAddress(personObject.getString("address"));
- System.out.println(person);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
运行结果如下:
Java解析Array数组
模板数据:
- {
- "students": [
- "xiaoming",
- "xiaohua",
- "daming",
- "dahua"
- ]
- }
使用
- jsonObject.getJSONArray
使用第三方库,解析代码如下:
- @Test
- public void testJsonArray(){
- String jsonString = "{\n" +
- " \"students\": [\n" +
- " \"xiaoming\",\n" +
- " \"xiaohua\",\n" +
- " \"daming\",\n" +
- " \"dahua\"\n" +
- " ]\n" +
- "}";
- try {
- JSONObject jsonObject = JSONObject.parseObject(jsonString);
- JSONArray jsonArray = jsonObject.getJSONArray("students");
- for (int i = 0; i <jsonArray.size(); i++) {
- System.out.println(jsonArray.get(i));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
运行结果如下:
Json解析ArrayObject数组对象
模板数据:
- {
- "persons": [
- {
- "id": "1",
- "name": "xiaoming",
- "address": "address"
- },
- {
- "id": "2",
- "name": "xiaohua",
- "address": "address"
- },
- {
- "id": "3",
- "name": "daming",
- "address": "address"
- },
- {
- "id": "4",
- "name": "dahua",
- "address": "address"
- }
- ]
- }
使用第三方库,解析代码如下:
- @Test
- public void testJsonArrayAndObject(){
- String jsonString = "{\n" +
- " \"persons\": [\n" +
- " {\n" +
- " \"id\": \"1\",\n" +
- " \"name\": \"xiaoming\",\n" +
- " \"address\": \"address\"\n" +
- " },\n" +
- " {\n" +
- " \"id\": \"2\",\n" +
- " \"name\": \"xiaohua\",\n" +
- " \"address\": \"address\"\n" +
- " },\n" +
- " {\n" +
- " \"id\": \"3\",\n" +
- " \"name\": \"daming\",\n" +
- " \"address\": \"address\"\n" +
- " },\n" +
- " {\n" +
- " \"id\": \"4\",\n" +
- " \"name\": \"dahua\",\n" +
- " \"address\": \"address\"\n" +
- " }\n" +
- " ]\n" +
- "}";
- try {
- JSONObject jsonObject = JSONObject.parseObject(jsonString);
- JSONArray jsonArray = jsonObject.getJSONArray("persons");
- for (int i = 0; i <jsonArray.size(); i++) {
- JSONObject jsonArrayObjectItem = JSONObject.parseObject(jsonArray.get(i).toString());
- if(jsonArrayObjectItem!=null){
- Person person = new Person();
- person.setId(jsonArrayObjectItem.getString("id"));
- person.setName(jsonArrayObjectItem.getString("name"));
- person.setAddress(jsonArrayObjectItem.getString("address"));
- System.out.println(person);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
解析结果如下:
下面来个小练习,可以下载这个地址的文件:简单的练习
链接:https://pan.baidu.com/s/1CWReej0FPmI1IHketA4Yxg 密码:5oy4
大家可以解析一下,练练手,这里就不公布答案了。以后有时间补上答案。我要求返回的数据格式是这样的。
- {
- "sheet_num": "100",
- "result": [
- {
- "key?": "result",
- "NoNodeId": "?",
- "nodeId": "?"
- }
- ],
- "desc": "所有的{nodeId}相加",
- "Nodesc": "所有的{NoNodeId}相加",
- "text": "{desc} \n {Nodesc}"
- }
key?即取所有value等于result的key,
取所有NoNodeId的值,并存储数组里面。
取所有nodeId的值,并存储数组里面。
desc 就是所有的nodeId相加
Nodesc 就是所有的NoNodeId相加
text,就是desc加上回车,再加Nodesc