Cách phân tích JSON trong Java


1049

Tôi có văn bản JSON sau đây. Làm thế nào tôi có thể phân tích nó để có được các giá trị của pageName, pagePic, post_id, vv?

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

7
Các thư viện JSON được xây dựng trong java là cách nhanh chóng để làm như vậy, nhưng theo kinh nghiệm của tôi, GSON là thư viện tốt nhất để phân tích cú pháp JSON thành POJO một cách không đau đớn.
Iman Akbari

16
Đây là câu hỏi được bình chọn và bảo vệ đầu tiên mà câu trả lời tôi thấy khó hiểu nhất
Riyafa Abdul Hameed

6
@JaysonMinard đồng ý. Yêu cầu can thiệp mod. Điều này nên được đóng lại thực sự. Ban đầu tôi đã giả định (sai) Tôi không thể làm như vậy trong khi câu hỏi được bảo vệ, vì vậy tôi đã không bảo vệ nó và làm việc của mình. Tái bảo vệ nó ngay bây giờ để ngăn chặn câu trả lời đại diện thấp và như vậy, trong khi chờ đợi một mod.
Mena

4
"Câu hỏi này không cho thấy bất kỳ nỗ lực nghiên cứu nào" - Chú giải công cụ nút Downvote
Jean-François Corbett

6
Câu hỏi này đang được thảo luận trên Meta .
Đánh dấu Amery

Câu trả lời:


753

Các org.json thư viện rất dễ dàng để sử dụng. Mã ví dụ dưới đây:

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

Bạn có thể tìm thấy nhiều ví dụ từ: Phân tích JSON trong Java

Bình có thể tải xuống: http://mvnreposective.com/artifact/org.json/json


15
Tôi đồng ý với @StaxMan. Tôi vừa thử org.json và nó cồng kềnh khủng khiếp. Ví dụ, nó thực sự không chơi với các loại Bộ sưu tập Java tiêu chuẩn.
Ken Williams

7
@StaxMan Tôi sẽ chọn org.jsoncác thư viện khác để phân tích cú pháp JSON đơn giản mà không cần nhìn. Đây là thư viện tham khảo mà Douglas Crockford (người khám phá JSON) đã tạo ra.
Omar Al-Ithawi

31
@OmarIthawi thật là ngớ ngẩn. Đó là một bằng chứng về khái niệm với API vụng về, triển khai không hiệu quả. Tôi nghĩ tốt hơn là xem xét các thư viện dựa trên giá trị riêng của họ, thay vì cố gắng suy luận chất lượng ra khỏi tầm nhìn của tác giả - Doug đã đạt được nhiều điều, nhưng điều đó không thực sự thay đổi phẩm chất của lib cụ thể. 10 năm trước đây là trò chơi duy nhất trong thị trấn, nhưng kể từ đó đã có nhiều tiến bộ tích cực. Nó giống như Struts của json libs.
StaxMan

12
org.json là một trong những thư viện json tồi tệ nhất. Bạn nên xem bộ tính năng và hiệu suất của các thư viện json có sẵn trước khi chọn. Đây là một điểm chuẩn tôi đã so sánh jackson, gson, org.json, genson bằng cách sử dụng JMH: github.com/fabienrenaud/java-json-benchmark . jackson là người chiến thắng rõ ràng ở đây.
fabien

4
Giấy phép không bao gồm bất kỳ giấy phép Nguồn mở nào thường được sử dụng và nó cũng giữ bản quyền.
Christian Vielma

536

Vì lợi ích của ví dụ, giả sử bạn có một lớp Personchỉ với một name.

private class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }
}

Google GSON ( Maven )

Yêu thích cá nhân của tôi về việc tuần tự hóa / khử tuần tự hóa các đối tượng JSON tuyệt vời.

Gson g = new Gson();

Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John

System.out.println(g.toJson(person)); // {"name":"John"}

Cập nhật

Nếu bạn muốn lấy một thuộc tính duy nhất, bạn cũng có thể thực hiện dễ dàng với thư viện Google:

JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();

System.out.println(jsonObject.get("name").getAsString()); //John

Org.JSON ( Maven )

Nếu bạn không cần khử tuần tự hóa đối tượng mà chỉ cần lấy một thuộc tính, bạn có thể thử org.json ( hoặc xem ví dụ GSON ở trên! )

JSONObject obj = new JSONObject("{\"name\": \"John\"}");

System.out.println(obj.getString("name")); //John

Jackson ( Maven )

ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);

System.out.println(user.name); //John

16
Câu trả lời tốt. Một đề xuất cho cải tiến nhỏ: cả GSON và Jackson cũng hỗ trợ sử dụng biểu diễn cây JSON (đối với Jackson đây là JsonNodes, GSON có một cái gì đó tương tự). Có thể là tốt để hiển thị đoạn trích, vì điều đó tương tự như cách duy nhất org.json cung cấp.
StaxMan

Hai thư viện khác đáng được đề cập (vì lợi ích của sự hoàn chỉnh): json-SimpleOracle's JSONP
jake stayman

3
@NeonWarge, tại sao? Dường như với tôi rằng câu trả lời này giả định rằng người ta đã định nghĩa một lớp Java chứa chính xác các trường giống như chuỗi JSON, không hơn không kém. Đây là một giả định khá mạnh mẽ.
Andrea Lazzarotto

1
json-Simple và oracle's jsonp thực hiện khủng khiếp: github.com/fabienrenaud/java-json-benchmark Để thực hiện, hãy chọn jackson hoặc dsljson.
fabien

GSON không hỗ trợ lọc động các trường ở các cấp độ khác ngoài root!
Gangnus

102
  1. Nếu một người muốn tạo đối tượng Java từ JSON và ngược lại, hãy sử dụng các tệp bên thứ ba của GSON hoặc JACKSON, v.v.

    //from object to JSON 
    Gson gson = new Gson();
    gson.toJson(yourObject);
    
    // from JSON to object 
    yourObject o = gson.fromJson(JSONString,yourObject.class);
  2. Nhưng nếu người ta chỉ muốn phân tích một chuỗi JSON và nhận được một số giá trị, (HOẶC tạo một chuỗi JSON từ đầu để gửi qua dây), chỉ cần sử dụng bình JaveEE có chứa JsonReader, JsonArray, JsonObject, v.v. thông số kỹ thuật như javax.json. Với hai lọ này, tôi có thể phân tích json và sử dụng các giá trị.

    Các API này thực sự tuân theo mô hình phân tích cú pháp DOM / SAX của XML.

    Response response = request.get(); // REST call 
        JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
        JsonArray jsonArray = jsonReader.readArray();
        ListIterator l = jsonArray.listIterator();
        while ( l.hasNext() ) {
              JsonObject j = (JsonObject)l.next();
              JsonObject ciAttr = j.getJsonObject("ciAttributes");

4
@nondescript Nếu tôi phải đoán tôi sẽ nói nó bị hạ cấp bởi vì nó không trả lời câu hỏi của người đăng ban đầu: "Mã yêu cầu là gì?" Các câu trả lời được trích dẫn cung cấp đoạn mã.
jewbix.cube

4
Lưu ý: Cả Jackson và GSON đều hỗ trợ ràng buộc kiểu cây và / hoặc Bản đồ / Danh sách, do đó không cần sử dụng gói Java EE (javax.json). javax.json có rất ít để cung cấp ngoài Jackson hoặc GSON.
StaxMan

Tôi đề nghị thêm một liên kết đến thư viện JavaEE.
Basil Bourque

72

trình phân tích cú pháp nhanh rất đơn giản, linh hoạt, rất nhanh và có thể tùy chỉnh. Thử nó

Đặc trưng:

  • Tuân thủ đặc tả JSON (RFC4627)
  • Trình phân tích cú pháp JSON hiệu suất cao
  • Hỗ trợ phương pháp phân tích cú pháp linh hoạt / có thể cấu hình
  • Xác thực cấu hình các cặp khóa / giá trị của bất kỳ Phân cấp JSON nào
  • Dễ dàng sử dụng # Dấu chân rất nhỏ
  • Tăng sự thân thiện với nhà phát triển và dễ dàng theo dõi các ngoại lệ
  • Hỗ trợ xác thực tùy chỉnh có thể cắm - Khóa / Giá trị có thể được xác thực bằng cách định cấu hình trình xác thực tùy chỉnh khi và gặp phải
  • Hỗ trợ trình phân tích cú pháp xác thực và không xác thực
  • Hỗ trợ hai loại cấu hình (JSON / XML) để sử dụng trình phân tích cú pháp xác thực JSON nhanh
  • Yêu cầu JDK 1.5
  • Không phụ thuộc vào thư viện bên ngoài
  • Hỗ trợ tạo JSON thông qua tuần tự hóa đối tượng
  • Hỗ trợ lựa chọn loại bộ sưu tập trong quá trình phân tích cú pháp

Nó có thể được sử dụng như thế này:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);

3
Có một javadoc có sẵn?
jboi

24
Gói này không thể xử lý các giá trị trống khi phân tích cú pháp. Ví dụ: ... "mô tả": "" ... ném Ngoại lệ
Ivan

6
Tôi đã khắc phục vấn đề này (và nhiều vấn đề khác) trong code.google.com/p/quick-json/issues/detail?id=11 Tôi hy vọng tác giả sẽ dành thời gian để khắc phục nó trong bản phát hành chính thức.
noamik

8
Trong số các tính năng được liệt kê, không có gì là duy nhất so với các tùy chọn khác - và yêu cầu về hiệu suất cao không được hỗ trợ bởi bất cứ điều gì; không giống như để biết thêm trưởng thành thư viện (Gson, Jackson, Genson, Boon) được bao gồm trong các tiêu chuẩn như github.com/eishay/jvm-serializers , github.com/novoj/JavaJsonPerformanceTest hoặc developer.com/lang/jscript/... - Tôi đã không thấy thư viện này bao gồm trong các bài kiểm tra, hoặc đề cập đến nó đang được sử dụng rộng rãi.
StaxMan

26
Dự án này dường như đã chết và dường như không còn được lưu trữ trong kho lưu trữ Maven trung tâm.
8bitjunkie

40

Bạn có thể sử dụng Google Gson .

Sử dụng thư viện này, bạn chỉ cần tạo một mô hình có cùng cấu trúc JSON. Sau đó, mô hình được tự động điền vào. Bạn phải gọi các biến của mình là các khóa JSON hoặc sử dụng@SerializedName nếu bạn muốn sử dụng các tên khác nhau.

JSON

Từ ví dụ của bạn:

{
    "pageInfo": {
        "pageName": "abc",
        "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
        {
            "post_id": "123456789012_123456789012",
            "actor_id": "1234567890",
            "picOfPersonWhoPosted": "http://example.com/photo.jpg",
            "nameOfPersonWhoPosted": "Jane Doe",
            "message": "Sounds cool. Can't wait to see it!",
            "likesCount": "2",
            "comments": [],
            "timeOfPost": "1234567890"
        }
    ]
}

Mô hình

class MyModel {

    private PageInfo pageInfo;
    private ArrayList<Post> posts = new ArrayList<>();
}

class PageInfo {

    private String pageName;
    private String pagePic;
}

class Post {

    private String post_id;

    @SerializedName("actor_id") // <- example SerializedName
    private String actorId;

    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private String likesCount;
    private ArrayList<String> comments;
    private String timeOfPost;
}

Phân tích cú pháp

Bây giờ bạn có thể phân tích cú pháp bằng thư viện Gson:

MyModel model = gson.fromJson(jsonString, MyModel.class);

Nhập khẩu cấp

Nhớ nhập thư viện trong tệp Gradle ứng dụng

implementation 'com.google.code.gson:gson:2.8.6' // or earlier versions

Tạo mô hình tự động

Bạn có thể tự động tạo mô hình từ JSON bằng các công cụ trực tuyến như thế này .


38

Hầu như tất cả các câu trả lời được đưa ra đều yêu cầu khử tuần hoàn đầy đủ JSON thành một đối tượng Java trước khi truy cập giá trị trong thuộc tính quan tâm. Một cách khác, không đi theo con đường này là sử dụng JsonPATH giống như XPath cho JSON và cho phép truyền tải các đối tượng JSON.

Đây là một đặc điểm kỹ thuật và những người giỏi ở JayWay đã tạo ra một triển khai Java cho đặc tả mà bạn có thể tìm thấy ở đây: https://github.com/jayway/JsonPath

Vì vậy, về cơ bản để sử dụng nó, hãy thêm nó vào dự án của bạn, ví dụ:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>${version}</version>
</dependency>

và sử dụng:

String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");

Vân vân...

Kiểm tra trang đặc tả JsonPath để biết thêm thông tin về các cách khác để chuyển đổi JSON.


Đây là một thư viện rất tốt đặc biệt là để đọc và cập nhật JSON nhưng hãy cẩn thận với một số vấn đề đã biết về thư viện này. Xem [1]: github.com/json-path/JsonPath/issues/272 [2]: github.com/json-path/JsonPath/issues/375
papigee

38

A - Giải thích

Bạn có thể sử dụng các thư viện Jackson , để liên kết Chuỗi JSON vào các cá thể POJO ( Plain Old Java Object ). POJO đơn giản là một lớp chỉ có các trường riêng và các phương thức getter / setter công khai. Jackson sẽ vượt qua các phương pháp (sử dụng sự phản chiếu ) và ánh xạ đối tượng JSON vào đối tượng POJO vì tên trường của lớp khớp với tên trường của đối tượng JSON.

Trong đối tượng JSON của bạn, thực sự là một đối tượng tổng hợp , đối tượng chính bao gồm o hai đối tượng phụ. Vì vậy, các lớp POJO của chúng ta nên có cùng hệ thống phân cấp. Tôi sẽ gọi toàn bộ Đối tượng JSON là đối tượng Trang . Đối tượng trang bao gồm một đối tượng PageInfo và mảng đối tượng Post .

Vì vậy, chúng ta phải tạo ba lớp POJO khác nhau;

  • Lớp trang , một tổ hợp của lớp PageInfo và mảng các trường hợp bài
  • Lớp PageInfo
  • Bài viết lớp

Gói duy nhất tôi đã sử dụng là Jackson ObjectMapper, những gì chúng tôi làm là ràng buộc dữ liệu;

com.fasterxml.jackson.databind.ObjectMapper

Các phụ thuộc cần thiết, các tệp jar được liệt kê dưới đây;

  • jackson-core-2.5.1.jar
  • jackson-databind-2.5.1.jar
  • jackson-chú thích-2.5.0.jar

Đây là mã yêu cầu;

B - Lớp POJO chính: Trang

package com.levo.jsonex.model;

public class Page {

    private PageInfo pageInfo;
    private Post[] posts;

    public PageInfo getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }

    public Post[] getPosts() {
        return posts;
    }

    public void setPosts(Post[] posts) {
        this.posts = posts;
    }

}

C - Lớp POJO trẻ em: PageInfo

package com.levo.jsonex.model;

public class PageInfo {

    private String pageName;
    private String pagePic;

    public String getPageName() {
        return pageName;
    }

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }

    public String getPagePic() {
        return pagePic;
    }

    public void setPagePic(String pagePic) {
        this.pagePic = pagePic;
    }

}

D - Lớp POJO trẻ em: Bài

package com.levo.jsonex.model;

public class Post {

    private String post_id;
    private String actor_id;
    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private int likesCount;
    private String[] comments;
    private int timeOfPost;

    public String getPost_id() {
        return post_id;
    }

    public void setPost_id(String post_id) {
        this.post_id = post_id;
    }

    public String getActor_id() {
        return actor_id;
    }

    public void setActor_id(String actor_id) {
        this.actor_id = actor_id;
    }

    public String getPicOfPersonWhoPosted() {
        return picOfPersonWhoPosted;
    }

    public void setPicOfPersonWhoPosted(String picOfPersonWhoPosted) {
        this.picOfPersonWhoPosted = picOfPersonWhoPosted;
    }

    public String getNameOfPersonWhoPosted() {
        return nameOfPersonWhoPosted;
    }

    public void setNameOfPersonWhoPosted(String nameOfPersonWhoPosted) {
        this.nameOfPersonWhoPosted = nameOfPersonWhoPosted;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getLikesCount() {
        return likesCount;
    }

    public void setLikesCount(int likesCount) {
        this.likesCount = likesCount;
    }

    public String[] getComments() {
        return comments;
    }

    public void setComments(String[] comments) {
        this.comments = comments;
    }

    public int getTimeOfPost() {
        return timeOfPost;
    }

    public void setTimeOfPost(int timeOfPost) {
        this.timeOfPost = timeOfPost;
    }

}

E - Tệp JSON mẫu: sampleJSONFile.json

Tôi vừa sao chép mẫu JSON của bạn vào tệp này và đặt nó trong thư mục dự án.

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

Mã giới thiệu

package com.levo.jsonex;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.levo.jsonex.model.Page;
import com.levo.jsonex.model.PageInfo;
import com.levo.jsonex.model.Post;

public class JSONDemo {

    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class);

            printParsedObject(page);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void printParsedObject(Page page) {
        printPageInfo(page.getPageInfo());
        System.out.println();
        printPosts(page.getPosts());
    }

    private static void printPageInfo(PageInfo pageInfo) {
        System.out.println("Page Info;");
        System.out.println("**********");
        System.out.println("\tPage Name : " + pageInfo.getPageName());
        System.out.println("\tPage Pic  : " + pageInfo.getPagePic());
    }

    private static void printPosts(Post[] posts) {
        System.out.println("Page Posts;");
        System.out.println("**********");
        for(Post post : posts) {
            printPost(post);
        }
    }

    private static void printPost(Post post) {
        System.out.println("\tPost Id                   : " + post.getPost_id());
        System.out.println("\tActor Id                  : " + post.getActor_id());
        System.out.println("\tPic Of Person Who Posted  : " + post.getPicOfPersonWhoPosted());
        System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
        System.out.println("\tMessage                   : " + post.getMessage());
        System.out.println("\tLikes Count               : " + post.getLikesCount());
        System.out.println("\tComments                  : " + Arrays.toString(post.getComments()));
        System.out.println("\tTime Of Post              : " + post.getTimeOfPost());
    }

}

Đầu ra G - Demo

Page Info;
****(*****
    Page Name : abc
    Page Pic  : http://example.com/content.jpg
Page Posts;
**********
    Post Id                   : 123456789012_123456789012
    Actor Id                  : 1234567890
    Pic Of Person Who Posted  : http://example.com/photo.jpg
    Name Of Person Who Posted : Jane Doe
    Message                   : Sounds cool. Can't wait to see it!
    Likes Count               : 2
    Comments                  : []
    Time Of Post              : 1234567890

26

Sử dụng tối thiểu json rất nhanh và dễ sử dụng. Bạn có thể phân tích cú pháp từ String obj và Stream.

Dữ liệu mẫu:

{
  "order": 4711,
  "items": [
    {
      "name": "NE555 Timer IC",
      "cat-id": "645723",
      "quantity": 10,
    },
    {
      "name": "LM358N OpAmp IC",
      "cat-id": "764525",
      "quantity": 2
    }
  ]
}

Phân tích cú pháp:

JsonObject object = Json.parse(input).asObject();
int orders = object.get("order").asInt();
JsonArray items = object.get("items").asArray();

Tạo JSON:

JsonObject user = Json.object().add("name", "Sakib").add("age", 23);

Maven:

<dependency>
  <groupId>com.eclipsesource.minimal-json</groupId>
  <artifactId>minimal-json</artifactId>
  <version>0.9.4</version>
</dependency>

Pojo sẽ trông như thế nào?
Jesse

Đối với Pojo sử dụng gson. Thư viện này không hỗ trợ.
Sakib Sami

22

Tôi tin rằng cách tốt nhất nên là trải qua API Java JSON chính thức vẫn đang hoạt động.


7
Kể từ khi tôi trả lời, tôi bắt đầu sử dụng Jackson và tôi nghĩ đó là một trong những thư viện tốt nhất hiện có để khử tuần tự JSON.
Giovanni Botta

2
Tại sao họ sử dụng lại JSONP có nghĩa là một cái gì đó khác với JSON với Padding ? ...
Chris Wesseling

@ChrisWesseling Ý bạn là gì?
Giovanni Botta

"API Java để xử lý JSON (JSON-P)" là tiêu đề của tài liệu bạn liên kết đến. Và nó làm tôi bối rối, vì tôi biết JSONP có nghĩa là một cái gì đó khác.
Chris Wesseling

1
@ChrisWesseling ôi thật khó hiểu. Đó là những gì họ đã chọn cho đặc điểm kỹ thuật. Tuy nhiên như tôi đã nói, tôi sẽ đi thẳng đến Jackson.
Giovanni Botta

22

Vì chưa có ai đề cập đến nó, đây là khởi đầu của một giải pháp sử dụng Nashorn (phần thời gian chạy JavaScript của Java 8, nhưng không được dùng trong Java 11).

Giải pháp

private static final String EXTRACTOR_SCRIPT =
    "var fun = function(raw) { " +
    "var json = JSON.parse(raw); " +
    "return [json.pageInfo.pageName, json.pageInfo.pagePic, json.posts[0].post_id];};";

public void run() throws ScriptException, NoSuchMethodException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.eval(EXTRACTOR_SCRIPT);
    Invocable invocable = (Invocable) engine;
    JSObject result = (JSObject) invocable.invokeFunction("fun", JSON);
    result.values().forEach(e -> System.out.println(e));
}

So sánh hiệu suất

Tôi đã viết nội dung JSON chứa ba mảng tương ứng 20, 20 và 100 phần tử. Tôi chỉ muốn lấy 100 phần tử từ mảng thứ ba. Tôi sử dụng hàm JavaScript sau để phân tích và nhận các mục nhập của tôi.

var fun = function(raw) {JSON.parse(raw).entries};

Thực hiện cuộc gọi một triệu lần bằng Nashorn mất 7,5 ~ 7,8 giây

(JSObject) invocable.invokeFunction("fun", json);

org.json mất 20 ~ 21 giây

new JSONObject(JSON).getJSONArray("entries");

Jackson mất 6,5 ~ 7 giây

mapper.readValue(JSON, Entries.class).getEntries();

Trong trường hợp này, Jackson hoạt động tốt hơn Nashorn, hoạt động tốt hơn nhiều so với org.json. API Nashorn khó sử dụng hơn org.json hoặc Jackson. Tùy thuộc vào yêu cầu của bạn Jackson và Nashorn cả hai có thể là giải pháp khả thi.


1
Đơn vị " "" là gì? Không phải inch? Có phải là giây không? Phút?
Peter Mortensen

1
@PeterMortensen nó có nghĩa là giây. Vì có vẻ như không rõ ràng tôi sẽ thay đổi nó. Cảm ơn đã xem xét.
otonglet

2
Thật không may, Nashorn không được dùng trong Java 11. JEP 335 .
Per Mildner

1
Tôi biết Nashorn không được tán thành, nhưng tôi thích câu trả lời này vì tôi không muốn bất kỳ sự phụ thuộc nào; tuy nhiên, tôi đã phải làm lại ví dụ một chút:ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
kgibm

21

Ví dụ dưới đây cho thấy cách đọc văn bản trong câu hỏi, được biểu diễn dưới dạng biến "jsonText". Giải pháp này sử dụng API Java EE7 javax.json (được đề cập trong một số câu trả lời khác). Lý do tôi đã thêm nó dưới dạng một câu trả lời riêng biệt là đoạn mã sau cho biết cách thực sự truy cập một số giá trị được hiển thị trong câu hỏi. Việc triển khai API javax.json sẽ được yêu cầu để làm cho mã này chạy. Gói đầy đủ cho mỗi lớp được yêu cầu được bao gồm vì tôi không muốn khai báo các câu lệnh "nhập khẩu".

javax.json.JsonReader jr = 
    javax.json.Json.createReader(new StringReader(jsonText));
javax.json.JsonObject jo = jr.readObject();

//Read the page info.
javax.json.JsonObject pageInfo = jo.getJsonObject("pageInfo");
System.out.println(pageInfo.getString("pageName"));

//Read the posts.
javax.json.JsonArray posts = jo.getJsonArray("posts");
//Read the first post.
javax.json.JsonObject post = posts.getJsonObject(0);
//Read the post_id field.
String postId = post.getString("post_id");

Bây giờ, trước khi bất kỳ ai đi xuống và đưa ra câu trả lời này vì nó không sử dụng GSON, org.json, Jackson hoặc bất kỳ khuôn khổ bên thứ 3 nào khác có sẵn, đó là một ví dụ về "mã bắt buộc" cho câu hỏi để phân tích văn bản được cung cấp. Tôi nhận thức rõ rằng việc tuân thủ tiêu chuẩn JSR 353 hiện tại không được xem xét đối với JDK 9 và do đó, đặc tả JSR 353 nên được xử lý giống như bất kỳ triển khai xử lý JSON của bên thứ 3 nào khác.


15

Điều này đã thổi vào tâm trí của tôi với nó dễ dàng như thế nào. Bạn chỉ có thể chuyển một Stringtổ chức JSON của mình cho hàm tạo của JSONObject trong gói org.json mặc định.

JSONArray rootOfPage =  new JSONArray(JSONString);

Làm xong. Giọt micro . Điều này làm việc với JSONObjectslà tốt. Sau đó, bạn có thể xem qua hệ thống phân cấp của mình Objectsbằng cách sử dụng các get()phương thức trên các đối tượng của bạn.


13
Các JSONArrayloại không phải là một phần của API J2SE JDK và bạn không nói trước với các API hoặc thư viện của bên thứ ba cung cấp loại này.
Bobious

2
Không phải là tôi khuyên bạn nên sử dụng nó, nhưng tôi nghĩ rằng điều này đề cập đến gói "org.json" từ json.org/java . Nó từng được sử dụng trước khi các thư viện Java tốt trở nên có sẵn, nhưng đây là năm trước (2008 hoặc trước đó)
StaxMan

1
Hay brainmurphy1 có nghĩa là JSONArray trong Android?
Alexander Farber

12

Có nhiều thư viện JSON có sẵn trong Java.

Những người nổi tiếng nhất là: Jackson, GSON, Genson, FastJson và org.json.

Thông thường có ba điều người ta nên xem xét khi chọn bất kỳ thư viện nào:

  1. Hiệu suất
  2. Dễ sử dụng (mã đơn giản để viết và dễ đọc) - đi kèm với các tính năng.
  3. Đối với ứng dụng dành cho thiết bị di động: kích thước phụ thuộc / kích thước jar

Cụ thể đối với các thư viện JSON (và bất kỳ libs tuần tự hóa / giải tuần tự hóa nào), cơ sở dữ liệu cũng thường được quan tâm vì nó loại bỏ sự cần thiết phải viết mã nồi hơi để đóng gói / giải nén dữ liệu.

Đối với 1, hãy xem điểm chuẩn này: https://github.com/fabienrenaud/java-json-benchmark Tôi đã sử dụng JMH để so sánh hiệu suất (jackson, gson, genson, fastjson, org.json, jsonp) của trình tuần tự hóa và trình giải mã và API cơ sở dữ liệu. Đối với 2, bạn có thể tìm thấy nhiều ví dụ trên Internet. Điểm chuẩn ở trên cũng có thể được sử dụng làm nguồn ví dụ ...

Lấy nhanh điểm chuẩn: Jackson thực hiện tốt hơn 5 đến 6 lần so với org.json và tốt hơn gấp đôi so với GSON.

Đối với ví dụ cụ thể của bạn, đoạn mã sau giải mã json của bạn bằng jackson:

public class MyObj {

    private PageInfo pageInfo;
    private List<Post> posts;

    static final class PageInfo {
        private String pageName;
        private String pagePic;
    }

    static final class Post {
        private String post_id;
        @JsonProperty("actor_id");
        private String actorId;
        @JsonProperty("picOfPersonWhoPosted")
        private String pictureOfPoster;
        @JsonProperty("nameOfPersonWhoPosted")
        private String nameOfPoster;
        private String likesCount;
        private List<String> comments;
        private String timeOfPost;
    }

    private static final ObjectMapper JACKSON = new ObjectMapper();
    public static void main(String[] args) throws IOException {
        MyObj o = JACKSON.readValue(args[0], MyObj.class); // assumes args[0] contains your json payload provided in your question.
    }
}

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi.


11

Ngoài các câu trả lời khác, tôi giới thiệu dịch vụ mã nguồn mở trực tuyến này jsonschema2pojo.org để tạo nhanh các lớp Java từ lược đồ json hoặc json cho GSON, Jackson 1.x hoặc Jackson 2.x. Ví dụ: nếu bạn có:

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": 1234567890,
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": 2,
              "comments": [],
              "timeOfPost": 1234567890
         }
    ]
}

Các jsonschema2pojo.org cho GSON tạo:

@Generated("org.jsonschema2pojo")
public class Container {
    @SerializedName("pageInfo")
    @Expose
    public PageInfo pageInfo;
    @SerializedName("posts")
    @Expose
    public List<Post> posts = new ArrayList<Post>();
}

@Generated("org.jsonschema2pojo")
public class PageInfo {
    @SerializedName("pageName")
    @Expose
    public String pageName;
    @SerializedName("pagePic")
    @Expose
    public String pagePic;
}

@Generated("org.jsonschema2pojo")
public class Post {
    @SerializedName("post_id")
    @Expose
    public String postId;
    @SerializedName("actor_id")
    @Expose
    public long actorId;
    @SerializedName("picOfPersonWhoPosted")
    @Expose
    public String picOfPersonWhoPosted;
    @SerializedName("nameOfPersonWhoPosted")
    @Expose
    public String nameOfPersonWhoPosted;
    @SerializedName("message")
    @Expose
    public String message;
    @SerializedName("likesCount")
    @Expose
    public long likesCount;
    @SerializedName("comments")
    @Expose
    public List<Object> comments = new ArrayList<Object>();
    @SerializedName("timeOfPost")
    @Expose
    public long timeOfPost;
}

9

Nếu bạn có một số lớp Java (nói là Tin nhắn) đại diện cho chuỗi JSON (jsonString), bạn có thể sử dụng thư viện Jackson JSON với:

Message message= new ObjectMapper().readValue(jsonString, Message.class);

và từ đối tượng tin nhắn, bạn có thể tìm nạp bất kỳ thuộc tính nào của nó.


9

Gson rất dễ học và thực hiện, những gì chúng ta cần biết là theo hai phương pháp

  • toJson () - Chuyển đổi đối tượng Java sang định dạng JSON

  • fromJson () - Chuyển đổi JSON thành đối tượng Java

`

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {

    Gson gson = new Gson();

    try {

        BufferedReader br = new BufferedReader(
            new FileReader("c:\\file.json"));

        //convert the json string back to object
        DataObject obj = gson.fromJson(br, DataObject.class);

        System.out.println(obj);

    } catch (IOException e) {
        e.printStackTrace();
    }

    }
}

`


Để có kiến ​​thức đầy đủ về Gson tham khảo các liên kết dưới đây. github.com/google/gson/blob/master/UserGuide.md
venkat

9

Có nhiều thư viện nguồn mở có mặt để phân tích nội dung JSON cho một đối tượng hoặc chỉ để đọc các giá trị JSON. Yêu cầu của bạn chỉ là đọc các giá trị và phân tích nó đến đối tượng tùy chỉnh. Vì vậy, thư viện org.json là đủ trong trường hợp của bạn.

Sử dụng thư viện org.json để phân tích cú pháp và tạo JsonObject:

JSONObject jsonObj = new JSONObject(<jsonStr>);

Bây giờ, sử dụng đối tượng này để nhận các giá trị của bạn:

String id = jsonObj.getString("pageInfo");

Bạn có thể xem một ví dụ đầy đủ ở đây:

Cách phân tích JSON trong Java


Có vẻ như tất cả các câu trả lời của bạn có chứa một liên kết đến trang web đó. Nếu đó là thư rác, xin vui lòng dừng lại. Nếu không, xin lỗi vì sự nhầm lẫn, nhưng tôi không nghĩ rằng cần phải đăng một liên kết trong tất cả các câu trả lời của bạn.
Vịt Donald

1
Thật khó để đưa ra một câu trả lời, nơi bạn có thể giải thích tất cả các kịch bản. Giống như trong trường hợp này, làm thế nào để đọc mảng json hoặc nhiều đối tượng json. Ngay cả khi tôi làm như vậy, câu trả lời sẽ rất dài và mọi người có thể bị nhầm lẫn. Vì vậy, tôi đưa ra một liên kết nơi giải thích thích hợp được đưa ra, với ví dụ thích hợp. Anh ta có thể chọn đến thăm hoặc chỉ có thể sử dụng lời giải thích của tôi mà thôi.
lalitbhagtani

1
Tôi nhận thấy rằng liên kết bạn đã cung cấp chỉ trình bày cách đọc JSON. Tôi có thể tìm thông tin về cách JSON ở đâu?
Lampros Tzanetos

Xin lỗi, nhưng tôi không hiểu câu hỏi của bạn: - "về cách JSON cũng vậy"
lalitbhagtani

7

Hãy làm một cái gì đó như thế này:

JSONParser jsonParser = new JSONParser();
JSONObject obj = (JSONObject) jsonParser.parse(contentString);
String product = (String) jsonObject.get("productId");

10
Er, đây là thư viện nào?
Stewart

2
Tôi nghĩ rằng anh ấy đang sử dụng org.json.simple
Lasitha Yapa

7

Bạn có thể sử dụng Thư viện Gson để phân tích chuỗi JSON.

Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonAsString, JsonObject.class);

String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
String pagePic = jsonObject.getAsJsonObject("pageInfo").get("pagePic").getAsString();
String postId = jsonObject.getAsJsonArray("posts").get(0).getAsJsonObject().get("post_id").getAsString();

Bạn cũng có thể lặp qua mảng "bài viết" như vậy:

JsonArray posts = jsonObject.getAsJsonArray("posts");
for (JsonElement post : posts) {
  String postId = post.getAsJsonObject().get("post_id").getAsString();
  //do something
}

5
{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

Java code :

JSONObject obj = new JSONObject(responsejsonobj);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......etc
}

9
Vui lòng giải thích câu trả lời của bạn vì các câu trả lời chỉ có mã giúp người khác ít hơn nhiều so với mã được ghi chép tốt. Xem "cho một người đàn ông một con cá và bạn nuôi sống anh ta một ngày; dạy một người đàn ông câu cá và bạn nuôi sống anh ta cả đời" .
Ái Hà Lee

Sẽ là tốt để đề cập đến điều này là cho lib 'org.json'. Tuy nhiên, tôi không nghĩ rằng đây là một cách tốt để làm điều đó rất dài dòng và bản thân 'org.json' đã bị lỗi thời (API chậm, cồng kềnh). Có nhiều lựa chọn tốt hơn: GSON, Jackson, Boon, Genson để sử dụng.
StaxMan

5

Đọc bài đăng blog sau đây, JSON trong Java .

Bài đăng này hơi cũ, nhưng tôi vẫn muốn trả lời câu hỏi của bạn.

Bước 1: Tạo một lớp POJO dữ liệu của bạn.

Bước 2: Bây giờ tạo một đối tượng bằng JSON.

Employee employee = null;
ObjectMapper mapper = new ObjectMapper();
try{
    employee =  mapper.readValue(newFile("/home/sumit/employee.json"), Employee.class);
} 
catch (JsonGenerationException e){
    e.printStackTrace();
}

Để tham khảo thêm, bạn có thể tham khảo các liên kết sau .


4

Các câu trả lời hàng đầu trên trang này sử dụng các ví dụ quá đơn giản như đối tượng với một thuộc tính (ví dụ: {name: value}). Tôi nghĩ rằng ví dụ đơn giản nhưng thực tế có thể giúp ai đó.

Vì vậy, đây là JSON được trả về bởi API Google Dịch:

{
  "data": 
     {
        "translations": 
          [
            {
              "translatedText": "Arbeit"
             }
          ]
     }
}

Tôi muốn truy xuất giá trị của thuộc tính "translText", ví dụ: "Arbeit" bằng cách sử dụng Gson của Google.

Hai cách tiếp cận có thể:

  1. Lấy chỉ một thuộc tính cần thiết

    String json  = callToTranslateApi("work", "de");
    JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
    return jsonObject.get("data").getAsJsonObject()
            .get("translations").getAsJsonArray()
            .get(0).getAsJsonObject()
            .get("translatedText").getAsString();
  2. Tạo đối tượng Java từ JSON

    class ApiResponse {
        Data data;      
        class Data {
            Translation[] translations;         
            class Translation {
                String translatedText;
            }
         }
     }

    ...

     Gson g = new Gson();
     String json =callToTranslateApi("work", "de");
     ApiResponse response = g.fromJson(json, ApiResponse.class);
     return response.data.translations[0].translatedText;

4

Trước tiên, bạn cần chọn một thư viện thực hiện để làm điều đó.

Các Java API cho JSON Processing (JSR 353) cung cấp các API di động để phân tích cú pháp, tạo, chuyển đổi, và JSON truy vấn sử dụng mô hình đối tượng và streaming API.

Việc triển khai tham khảo có tại đây: https://jsonp.java.net/

Tại đây bạn có thể tìm thấy danh sách các triển khai của JSR 353:

API triển khai JSR-353 (JSON) là gì

để giúp bạn quyết định ... Tôi cũng tìm thấy bài viết này:

http://blog.takipi.com/the-ultimate-json-l Library-json-fax-vs-gson-vs -jack-vs-json /

Nếu bạn chọn Jackson, đây là một bài viết hay về chuyển đổi giữa JSON sang / từ Java bằng Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /

Hy vọng nó giúp!


Bạn đang chỉ đến phiên bản 1 của thư viện Jackson. Đề nghị mạnh mẽ sử dụng phiên bản hiện tại của thư viện Jackson.
Herbert Yu

4

Bạn có thể sử dụng Jayway JsonPath . Dưới đây là một liên kết GitHub với mã nguồn, chi tiết pom và tài liệu tốt.

https://github.com/jayway/JsonPath

Hãy làm theo các bước dưới đây.

Bước 1 : Thêm phụ thuộc đường dẫn JSON của jayway trong đường dẫn lớp của bạn bằng Maven hoặc tải xuống tệp JAR và thêm thủ công.

<dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.2.0</version>
</dependency>

Bước 2 : Vui lòng lưu JSON đầu vào của bạn dưới dạng tệp cho ví dụ này. Trong trường hợp của tôi, tôi đã lưu JSON của bạn dưới dạng sampleJson.txt. Lưu ý bạn đã bỏ lỡ một dấu phẩy giữa pageInfo và bài viết.

Bước 3 : Đọc nội dung JSON từ tệp trên bằng cách sử dụng bộ đệm và lưu nó dưới dạng Chuỗi.

BufferedReader br = new BufferedReader(new FileReader("D:\\sampleJson.txt"));

        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }
        br.close();
        String jsonInput = sb.toString();

Bước 4 : Phân tích chuỗi JSON của bạn bằng trình phân tích cú pháp JSON của jayway.

Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonInput);

Bước 5 : Đọc chi tiết như bên dưới.

String pageName = JsonPath.read(document, "$.pageInfo.pageName");
String pagePic = JsonPath.read(document, "$.pageInfo.pagePic");
String post_id = JsonPath.read(document, "$.posts[0].post_id");

System.out.println("$.pageInfo.pageName " + pageName);
System.out.println("$.pageInfo.pagePic " + pagePic);
System.out.println("$.posts[0].post_id " + post_id);

Đầu ra sẽ là :

$.pageInfo.pageName = abc
$.pageInfo.pagePic = http://example.com/content.jpg
$.posts[0].post_id  = 123456789012_123456789012

3

Tôi có JSON như thế này:

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
}

Lớp Java

class PageInfo {

    private String pageName;
    private String pagePic;

    // Getters and setters
}

Mã để chuyển đổi JSON này thành một lớp Java.

    PageInfo pageInfo = JsonPath.parse(jsonString).read("$.pageInfo", PageInfo.class);

Maven

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.2.0</version>
</dependency>

2

Người ta có thể sử dụng chú thích Apache @Model để tạo các lớp mô hình Java biểu thị cấu trúc của các tệp JSON và sử dụng chúng để truy cập các phần tử khác nhau trong cây JSON . Không giống như các giải pháp khác, giải pháp này hoạt động hoàn toàn không có sự phản chiếu và do đó phù hợp với các môi trường không thể phản chiếu hoặc đi kèm với chi phí đáng kể.

Có một dự án Maven mẫu cho thấy việc sử dụng. Trước hết, nó xác định cấu trúc:

@Model(className="RepositoryInfo", properties = {
    @Property(name = "id", type = int.class),
    @Property(name = "name", type = String.class),
    @Property(name = "owner", type = Owner.class),
    @Property(name = "private", type = boolean.class),
})
final class RepositoryCntrl {
    @Model(className = "Owner", properties = {
        @Property(name = "login", type = String.class)
    })
    static final class OwnerCntrl {
    }
}

và sau đó, nó sử dụng các lớp Rep repositoryInfo và Chủ sở hữu được tạo để phân tích luồng đầu vào được cung cấp và chọn một số thông tin nhất định trong khi thực hiện điều đó:

List<RepositoryInfo> repositories = new ArrayList<>();
try (InputStream is = initializeStream(args)) {
    Models.parse(CONTEXT, RepositoryInfo.class, is, repositories);
}

System.err.println("there is " + repositories.size() + " repositories");
repositories.stream().filter((repo) -> repo != null).forEach((repo) -> {
    System.err.println("repository " + repo.getName() + 
        " is owned by " + repo.getOwner().getLogin()
    );
})

Thế là xong! Thêm vào đó là một ý chính trực tiếp hiển thị ví dụ tương tự cùng với giao tiếp mạng không đồng bộ.


2

jsoniter(jsoniterator) là một thư viện json tương đối mới và đơn giản, được thiết kế đơn giản và nhanh chóng. Tất cả những gì bạn cần làm để giải nén dữ liệu json là

JsonIterator.deserialize(jsonData, int[].class);

trong đó jsonDatalà một chuỗi dữ liệu json.

Kiểm tra trang web chính thức để biết thêm thông tin.


1

Chúng ta có thể sử dụng lớp JSONObject để chuyển đổi một chuỗi JSON thành một đối tượng JSON và để lặp lại đối tượng JSON. Sử dụng mã sau đây.

JSONObject jObj = new JSONObject(contents.trim());
Iterator<?> keys = jObj.keys();

while( keys.hasNext() ) {
  String key = (String)keys.next();
  if ( jObj.get(key) instanceof JSONObject ) {           
    System.out.println(jObj.getString(String key));
  }
}

2
Đây chỉ là Android
Ľubomír


1
@DermotCanniffe nó chỉ là Android.
dùng4020527

1

Bạn có thể sử dụng thư viện phân tích luồng DSM để phân tích cú pháp json và tài liệu XML phức tạp. DSM phân tích dữ liệu chỉ một lần và không tải tất cả dữ liệu vào bộ nhớ.

Giả sử chúng ta có lớp Trang để giải tuần tự hóa dữ liệu json.

Lớp trang

public class Page {
    private String pageName;
    private String pageImage;
    private List<Sting> postIds;

    // getter/setter

}

Tạo một tập tin ánh xạ yaml.

result:
  type: object     # result is array
  path: /posts
  fields:
    pageName:
        path: /pageInfo/pageName
    pageImage:
        path: /pageInfo/pagePic
    postIds:
      path: post_id
      type: array

Sử dụng DSM để trích xuất các trường.

DSM dsm=new DSMBuilder(new File("path-to-yaml-config.yaml")).create(Page.class);
Page page= (Page)dsm.toObject(new path-to-json-data.json");

biến trang được tuần tự hóa thành json:

{
  "pageName" : "abc",
  "pageImage" : "http://example.com/content.jpg",
  "postIds" : [ "123456789012_123456789012" ]
}

DSM rất tốt cho json và xml phức tạp.


0

Bạn có thể sử dụng JsonNodecho biểu diễn cây có cấu trúc của chuỗi JSON của bạn. Đó là một phần của thư viện jackson rắn đá có mặt khắp nơi.

ObjectMapper mapper = new ObjectMapper();
JsonNode yourObj = mapper.readTree("{\"k\":\"v\"}");
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.