国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 如何使用Jackson和JSON Pointer查詢解析任何JSON節點

如何使用Jackson和JSON Pointer查詢解析任何JSON節點

2022-01-04 13:19夢想畫家 Java教程

本文介紹了JSON Pointer是字符串表達式,可以非常方便解析復雜JSON節點值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Jackson和JSON Pointer查詢解析任何JSON節點

JSON Pointer是字符串表達式,用于標識JSON文檔特定節點。RFC 6901規范有定義,用于查詢復雜Json文檔結構。

1.示例Json文檔

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
    "firstName": "John",
    "lastName": "Doe",
    "address": {
        "street": "21 2nd Street",
        "city": "New York",
        "postalCode": "10021-3100",
        "coordinates": {
            "latitude": 40.7250387,
            "longitude": -73.9932568
        }
    },
    "phone": [
        "139",
        "137"
    ],
    "grade": [
        {
            "name": "math",
            "score": 99
        },
        {
            "name": "english",
            "score": 97
        }
    ]
}

該文檔包括復雜的嵌套,其中嵌套類型有對象,數組,數組對象。下面使用JSON Pointer進行解析。

2. 解析文檔

使用Jackson的核心對象ObjectMapper,首先解析json字符串未JsonNode。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
String json = "{\n" +
         "    \"firstName\": \"John\",\n" +
         "    \"lastName\": \"Doe\",\n" +
         "    \"address\": {\n" +
         "      \"street\": \"21 2nd Street\",\n" +
         "      \"city\": \"New York\",\n" +
         "      \"postalCode\": \"10021-3100\",\n" +
         "      \"coordinates\": {\n" +
         "        \"latitude\": 40.7250387,\n" +
         "        \"longitude\": -73.9932568\n" +
         "      }\n" +
         "    },\n" +
         "    \"phone\":[\"139\",\"137\"],\n" +
         "    \"grade\":[\n" +
         "        {\"name\":\"math\",\"score\":99},\n" +
         "        {\"name\":\"english\",\"score\":97}\n" +
         "    ]\n" +
         "  }";
 ObjectMapper mapper = new ObjectMapper();
 JsonNode node = mapper.readTree(json);

2.1 獲取屬性

?
1
2
JsonNode firstName = node.at("/firstName");
print("firstName",firstName.toString());

必須以/開頭,表示當前起始節點。

輸出結果:

firstName:"John"

2.2 獲取對象屬性

?
1
2
JsonNode coordinatesNode = node.at("/address/coordinates");
print("coordinatesNode",coordinatesNode.toString());

輸出結果:

coordinatesNode:{"latitude":40.7250387,"longitude":-73.9932568}

2.3 獲取數組屬性

?
1
2
JsonNode phoneNode = node.at("/phone");
print("phoneNode", phoneNode.toString());

輸出結果:

phoneNode:["139","137"]

2.4 獲取數組屬性元素

?
1
2
JsonNode phone1Node = node.at("/phone/0");
print("phone1Node",phone1Node.toString());

輸出結果:

phone1Node:"139"

2.4 獲取數組對象屬性

?
1
2
3
4
JsonNode nameNode = node.at("/grade/0/name");
print("name",nameNode.toString());
JsonNode scoreNode = node.at("/grade/0/score");
print("score",scoreNode.toString());

輸出結果:

name:"math"

score:99

Jackson 通用解析JSON方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.util;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * json 解析類,通用于全項目
 * <p/>
 * Created by 劉一波 on 15/7/24.
 * E-Mail:zhanlanstar@163.com
 */
@Slf4j
public class JsonUtils {
    private static ObjectMapper objectMapper = new ObjectMapper();
    static {
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(sdf);
    }
    /**
     * 提供給elasticsearch使用,把bean轉換成list map 集合類型,否則不能存入索引
     *
     * @param o
     * @return
     */
    public static Object beanToJsonObject(Object o) {
        return jsonStrToList(objectToJsonStr(o), Map.class);
    }
    public static String objectToJsonStr(Object o) {
        try {
            return objectMapper.writeValueAsString(o);
        } catch (IOException e) {
            log.error("object can not objectTranslate to json", e);
        }
        return null;
    }
    public static <T> T jsonStrToObject(String json, Class<T> cls) {
        try {
            return objectMapper.readValue(json, cls);
        } catch (IOException e) {
            log.error("json cant be objectTranslate to object", e);
            return null;
        }
    }
    public static <T> T jsonDataToObject(String jsonStr, Class<T> cls) {
        if (!StringUtils.isEmpty(jsonStr)) {
            T data = JsonUtils.jsonStrToObject(jsonStr, cls);
            return data;
        } else {
            return null;
        }
    }
    public static <T> List<T> jsonStrToList(String jsonStr, Class<?> clazz) {
        List<T> list = Lists.newArrayList();
        try {
            // 指定容器結構和類型(這里是ArrayList和clazz)
            TypeFactory t = TypeFactory.defaultInstance();
            list = objectMapper.readValue(jsonStr,
                    t.constructCollectionType(ArrayList.class, clazz));
        } catch (IOException e) {
            log.error("反序列化序列化attributes,從Json到List報錯", e);
        }
        return list;
    }
    public static Map jsonStrToMap(String attributes) {
        try {
            return objectMapper.readValue(attributes, HashMap.class);
        } catch (IOException e) {
            log.error("反序列化序列化attributes,從Json到HashMap報錯", e);
        }
        return new HashMap();
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/neweastsun/article/details/106530134

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产乱码一区二区三区在线观看 | 亚洲一区免费视频 | 国产欧美精品一区二区三区四区 | 国产一区二区精品在线观看 | 一区二区三区在线播放 | 成人片网址 | 亚洲精品久久久一区二区三区 | 久久久久久国产精品美女 | 91av入口| 欧美中文字幕在线 | 欧美片网站免费 | 日韩视频在线一区二区 | 黄色片视频在线播放 | 亚洲自拍偷拍一区 | 日韩毛片免费在线观看 | 成人在线小视频 | 91精品国产综合久久久久 | 日韩中文字幕在线 | 欧美久久久久久久久久久 | 精品欧美乱码久久久久久1区2区 | 日韩av成人 | 欧美日韩中文字幕在线 | 一区二区三区高清 | 亚洲综合色视频在线观看 | 97超碰在线播放 | 久久国产一区视频 | 在线看国产 | av基地网 | 成人在线免费看视频 | 久久新| 国产一级视频在线观看 | 国产a区| 午夜免费视频 | 激情综合激情 | 在线看av的网址 | 玖玖玖视频 | 久久蜜桃精品一区二区三区综合网 | 日韩在线一区二区三区免费视频 | 免费在线一区二区 | 国产91精品亚洲精品日韩已满 | 青草精品 |