जावा में JSON को पार्स कैसे करें


1048

मेरे पास निम्नलिखित JSON टेक्स्ट है। मैं इसे कैसे पार्स कर सकते हैं के मूल्यों को प्राप्त करने के लिए pageName, pagePic, post_id, आदि?

{
   "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
JSON लाइब्रेरी में बनाया गया java ऐसा करने का एक त्वरित तरीका है, लेकिन मेरे अनुभव में GSON एक JSON को दर्द रहित तरीके से पार्स करने के लिए सबसे अच्छी लाइब्रेरी है।
इमान अकबरी

16
यह पहला अत्यधिक मतदान और संरक्षित प्रश्न है जिसके उत्तर मुझे सबसे अधिक भ्रमित करने वाले लगे
रिया अब्दुल हमीद

6
@ जयसिनार्ड ने सहमति व्यक्त की। मॉड हस्तक्षेप के लिए कहा। यह वास्तव में बंद होना चाहिए। मैंने शुरू में (गलत तरीके से) मान लिया था कि मैं ऐसा नहीं कर सकता जबकि सवाल संरक्षित था, इसलिए मैंने इसे असुरक्षित किया और अपनी बात की। मॉड के लिए प्रतीक्षा करते समय कम प्रतिनिधि उत्तर और जैसे, को रोकने के लिए इसे फिर से सुरक्षित करें।
मैना

4
"यह सवाल कोई शोध प्रयास नहीं दिखाता है" - डाउनवोट बटन टूलटिप
जीन-फ्रांकोइस कॉर्बेट

6
इस सवाल पर मेटा पर चर्चा की जा रही है ।
मार्क अमेरी

जवाबों:


753

Org.json पुस्तकालय का उपयोग करने के लिए आसान है। नीचे दिए गए उदाहरण कोड:

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");
    ......
}

आपको इससे अधिक उदाहरण मिल सकते हैं: जावा में पार्स जेन्सन

डाउनलोड करने योग्य जार: http://mvnrepository.com/artifact/org.json/json


15
मैं @StaxMan से सहमत हूं। मैं सिर्फ org.json की कोशिश की और यह बहुत बोझिल है। यह वास्तव में मानक जावा संग्रह प्रकारों के साथ नहीं खेलता है, उदाहरण के लिए।
केन विलियम्स

7
@StaxMan मैं org.jsonसाधारण JSON पार्सिंग के लिए अन्य पुस्तकालयों का चयन करेगा, वो भी बिना देखे। यह संदर्भ पुस्तकालय है जिसे डगलस क्रॉकफोर्ड (JSON खोजकर्ता) ने बनाया है।
उमर अल-इतावी

31
@OmarIthawi जो सिर्फ मूर्खतापूर्ण है। यह अजीब एपीआई, अक्षम कार्यान्वयन के साथ एक सबूत-की-अवधारणा है। मुझे लगता है कि अपने स्वयं के गुणों पर पुस्तकालयों पर विचार करना बेहतर है, इसके बजाय अपने लेखकों की दृश्यता से गुणवत्ता को कम करने की कोशिश कर रहा है - डग ने कई चीजें हासिल की हैं, लेकिन यह वास्तव में विशेष रूप से कामेच्छा के गुणों को नहीं बदलता है। 10 साल पहले यह शहर का एकमात्र खेल था, लेकिन तब से बहुत सकारात्मक प्रगति हुई है। यह स्ट्रैट्स ऑफ जोंस लिबास की तरह है।
18

12
org.json सबसे खराब जोंस लाइब्रेरी में से एक है। चुनने से पहले उपलब्ध जस्सन लाइब्रेरी की सुविधा सेट और प्रदर्शन को देखना चाहिए। यहाँ एक बेंचमार्क है जिसकी मैंने जैकसन, जीसन, org.json, जेन्स का उपयोग करके JMH: github.com/fabienrenaud/java-json-benchmark से तुलना की । जैकसन यहां स्पष्ट विजेता है।
फेबियन

4
लाइसेंस में आमतौर पर उपयोग किए जाने वाले ओपन सोर्स लाइसेंसिंग शामिल नहीं है, और यह कॉपीराइट भी रखता है।
क्रिश्चियन विल्मा

536

उदाहरण के लिए मान लें कि आपके पास Personसिर्फ एक वर्ग है name

private class Person {
    public String name;

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

Google GSON ( मावेन )

वस्तुओं के महान JSON क्रमांकन / डी-क्रमांकन के रूप में मेरा व्यक्तिगत पसंदीदा।

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"}

अपडेट करें

यदि आप एकल विशेषता प्राप्त करना चाहते हैं, तो आप इसे Google लाइब्रेरी के साथ भी आसानी से कर सकते हैं:

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

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

संगठन। जेसन ( मावेन )

आप वस्तु की जरूरत नहीं है de-क्रमबद्धता लेकिन करने के लिए बस एक विशेषता हो, आप org.json कोशिश कर सकते हैं ( या इसके बाद के GSON उदाहरण हैं! )

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

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

जैक्सन ( मावेन )

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

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

16
अच्छा उत्तर। मामूली सुधार के लिए एक सुझाव: GSON और जैक्सन दोनों भी JSON ट्री प्रतिनिधित्व के उपयोग का समर्थन करते हैं (जैक्सन के लिए ये हैं JsonNode, GSON कुछ समान है)। स्निपेट्स दिखाना अच्छा हो सकता है, क्योंकि यह एकमात्र तरीका है जो org.json प्रदान करता है।
StaxMan

उल्लेख के लायक दो अन्य पुस्तकालय (संपूर्णता के हित में): json-simple और Oracle का JSONP
jake stayman

3
@ नीयनार्ज, क्यों? यह मुझे लगता है कि यह उत्तर मानता है कि एक ने पहले से ही एक जावा वर्ग को परिभाषित किया है जिसमें जेन्स स्ट्रिंग के समान क्षेत्र हैं, कुछ भी कम नहीं और कुछ भी नहीं। यह काफी मजबूत धारणा है।
एंड्रिया लज्जाज़ारो

1
json-simple और oracle's jsonp बहुत अच्छा प्रदर्शन करते हैं: github.com/fabienrenaud/java-json-benchmark प्रदर्शन के लिए, jackson या dsljson चुनें।
फेबियन

जीएसओएन रूट के अलावा अन्य स्तरों पर खेतों की गतिशील छानने का समर्थन नहीं करता है!
गैंगनस

102
  1. यदि कोई JSON से जावा ऑब्जेक्ट बनाना चाहता है और इसके विपरीत, GSON या JACKSON थर्ड पार्टी जार आदि का उपयोग करता है।

    //from object to JSON 
    Gson gson = new Gson();
    gson.toJson(yourObject);
    
    // from JSON to object 
    yourObject o = gson.fromJson(JSONString,yourObject.class);
  2. लेकिन अगर कोई सिर्फ JSON स्ट्रिंग को पार्स करना चाहता है और कुछ मान प्राप्त करना चाहता है, (या वायर भेजने के लिए स्क्रैच से JSON स्ट्रिंग बनाता है) तो JaveEE जार का उपयोग करें जिसमें JsonReader, JsonArray, JsonObbject शामिल है - आप उस के कार्यान्वयन को डाउनलोड करना चाह सकते हैं। javax.json की तरह कल्पना। इन दो जार के साथ मैं जोंस को पार्स करने और मूल्यों का उपयोग करने में सक्षम हूं।

    ये API वास्तव में XML के DOM / SAX पार्सिंग मॉडल का पालन करते हैं।

    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
अगर मुझे लगता है कि मैं कहना चाहूंगा कि इसे अस्वीकृत कर दिया गया था क्योंकि यह मूल पोस्टर के सवाल का जवाब नहीं देता है: "आवश्यक कोड क्या है?" उत्तर जो उत्कीर्ण किए गए थे वे कोड स्निपेट प्रदान करते थे।
jewbix.cube

4
नोट: जैक्सन और जीएसओएन दोनों ट्री-स्टाइल और / या मैप्स / लिस्ट बाइंडिंग का समर्थन करते हैं, इसलिए जावा ईई (javax.json) पैकेज का उपयोग करने की कोई आवश्यकता नहीं है। javax.json के पास जैक्सन या GSON से आगे की पेशकश करने के लिए बहुत कम है।
स्टेक्समैन

मैं JavaEE लाइब्रेरी के लिए एक लिंक जोड़ने का सुझाव देता हूं।
बेसिल बॉर्क

72

Quick-json parser बहुत सीधा, लचीला, बहुत तेज और अनुकूलन योग्य है। कोशिश करो

विशेषताएं:

  • JSON विनिर्देशन के साथ आज्ञाकारी (RFC4627)
  • उच्च प्रदर्शन JSON पार्सर
  • लचीले / विन्यास योग्य पार्सिंग दृष्टिकोण का समर्थन करता है
  • किसी भी JSON पदानुक्रम की कुंजी / मान जोड़े के विन्यास योग्य सत्यापन
  • उपयोग करने में आसान # बहुत छोटे पदचिह्न
  • डेवलपर को अनुकूल और अपवादों का पता लगाना आसान बनाता है
  • प्‍लग्‍जेबल कस्‍टम वेलिडेशन सपोर्ट - कस्टम वैलिडेटर्स को कंफर्म / वैल्यू को वैरिफाइड किया जा सकता है, जब उसका सामना किया गया हो
  • वैध और गैर-वैध पार्सर समर्थन
  • त्वरित-JSON सत्यापनकर्ता पार्सर का उपयोग करने के लिए दो प्रकार के कॉन्फ़िगरेशन (JSON / XML) का समर्थन
  • JDK 1.5 की आवश्यकता है
  • बाहरी पुस्तकालयों पर कोई निर्भरता नहीं
  • वस्तु क्रमांकन के माध्यम से JSON पीढ़ी के लिए समर्थन
  • पार्सिंग प्रक्रिया के दौरान संग्रह प्रकार चयन के लिए समर्थन

इसका उपयोग इस तरह किया जा सकता है:

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

3
क्या कोई जावदोक उपलब्ध है?
जौबी

24
पार्स करते समय यह पैकेज खाली मानों को संभाल नहीं सकता है। उदाहरण के लिए: ... "विवरण": "" ... एक अपवाद फेंकता है
इवान

6
मैंने इस मुद्दे (और कई अन्य) को code.google.com/p/quick-json/issues/detail?id=11 में तय किया है। मुझे आशा है कि लेखक आधिकारिक रिलीज़ में इसे ठीक करने के लिए समय देगा।
noamik

8
सूचीबद्ध विशेषताओं में, अन्य विकल्पों की तुलना में कुछ भी अद्वितीय नहीं है - और उच्च-प्रदर्शन का दावा किसी भी चीज द्वारा समर्थित नहीं है; अधिक परिपक्व पुस्तकालयों (Gson, जैक्सन, गेंसन, बून) के विपरीत जो बेंचमार्क में github.com/eishay/jvm-serializers , github.com/novoj/JavaJsonPerformtest या डेवलपर. com/lang/jscript/… - I जैसे बेंचमार्क में शामिल हैं। इस पुस्तकालय को परीक्षण में शामिल नहीं देखा है, या इसका व्यापक रूप से उपयोग किए जाने का उल्लेख है।
स्टेक्समैन

26
यह प्रोजेक्ट मृत प्रतीत होता है और प्रतीत होता है कि अब केंद्रीय मावेन भंडार में होस्ट नहीं किया जाएगा।
8bitjunkie

40

आप Google Gson का उपयोग कर सकते हैं ।

इस लाइब्रेरी का उपयोग करके आपको केवल उसी JSON संरचना के साथ एक मॉडल बनाने की आवश्यकता है। तब मॉडल स्वचालित रूप से भर जाता है। आपको अपने चर को अपनी JSON कुंजी के रूप में कॉल करना होगा, या @SerializedNameयदि आप विभिन्न नामों का उपयोग करना चाहते हैं।

JSON

अपने उदाहरण से:

{
    "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"
        }
    ]
}

नमूना

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;
}

पदच्छेद

अब आप Gson पुस्तकालय का उपयोग कर पार्स कर सकते हैं:

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

आयात आयात करें

एप्लिकेशन ग्रेड फ़ाइल में लाइब्रेरी आयात करना याद रखें

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

स्वचालित मॉडल पीढ़ी

आप JSON से मॉडल को इस तरह से ऑनलाइन टूल का उपयोग करके स्वचालित रूप से उत्पन्न कर सकते हैं ।


38

दिए गए लगभग सभी उत्तरों को ब्याज की संपत्ति में मूल्य तक पहुंचने से पहले एक जावा ऑब्जेक्ट में JSON के पूर्ण deserialization की आवश्यकता होती है। एक अन्य विकल्प, जो इस मार्ग पर नहीं जाता है, वह JSONPATH का उपयोग करना है जो JSON के लिए XPath की तरह है और JSON ऑब्जेक्ट्स का पता लगाने की अनुमति देता है।

यह एक विनिर्देश है और JayWay पर अच्छे लोगों ने विनिर्देशन के लिए एक जावा कार्यान्वयन बनाया है जिसे आप यहाँ पा सकते हैं: https://github.com/jayway/JsonPath

इसलिए मूल रूप से इसका उपयोग करने के लिए, इसे अपनी परियोजना में जोड़ें, जैसे:

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

और उपयोग करने के लिए:

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

आदि...

JSON को ट्रांसवर्स करने के अन्य तरीकों के बारे में अधिक जानकारी के लिए JsonPath विनिर्देश पृष्ठ देखें।


यह JSON पढ़ने और अद्यतन करने के लिए विशेष रूप से एक बहुत अच्छा पुस्तकालय है लेकिन इस पुस्तकालय के बारे में कुछ ज्ञात मुद्दों से सावधान रहें। देखें [१]: github.com/json-path/JsonPath/issues/272 [२]: github.com/json-path/JsonPath/issues/375
पैपगी

38

A - स्पष्टीकरण

आप JSON स्ट्रिंग को POJO ( प्लेन ओल्ड जावा ऑब्जेक्ट ) इंस्टेंस में बाँधने के लिए जैक्सन लाइब्रेरीज़ का उपयोग कर सकते हैं । POJO केवल निजी क्षेत्रों और सार्वजनिक getter / सेटर विधियों के साथ एक वर्ग है। जैक्सन तरीकों ( प्रतिबिंब का उपयोग करके ) को पार करने जा रहा है , और जेएसएन ऑब्जेक्ट को पीओजेओ उदाहरण में मैप करता है, क्योंकि क्लास का फील्ड नाम जेएसएन ऑब्जेक्ट के फील्ड नामों पर फिट बैठता है।

आपकी JSON ऑब्जेक्ट में, जो वास्तव में एक संयुक्त ऑब्जेक्ट है, मुख्य ऑब्जेक्ट में ओ दो उप-ऑब्जेक्ट हैं। तो, हमारे POJO वर्गों में समान पदानुक्रम होना चाहिए। मैं संपूर्ण JSON ऑब्जेक्ट को पेज ऑब्जेक्ट कहूँगा । पेज ऑब्जेक्ट में PageInfo ऑब्जेक्ट और पोस्ट ऑब्जेक्ट सरणी शामिल हैं।

इसलिए हमें तीन अलग-अलग पीओजेओ कक्षाएं बनानी होंगी;

  • पेज क्लास, पेजइंफो क्लास का एक संयोजन और पोस्ट इंस्टेंस की सरणी
  • पेजइन्फो क्लास
  • डाक वर्ग

एकमात्र पैकेज जो मैंने उपयोग किया है वह है जैक्सन ऑब्जेक्टमैपर, जो हम करते हैं वह डेटा बाइंडिंग है;

com.fasterxml.jackson.databind.ObjectMapper

आवश्यक निर्भरताएं, जार फाइलें नीचे सूचीबद्ध हैं;

  • जैक्सन कोर-2.5.1.jar
  • जैक्सन-DataBind-2.5.1.jar
  • जैक्सन-एनोटेशन-2.5.0.jar

यहाँ आवश्यक कोड है;

B - मुख्य POJO वर्ग: पृष्ठ

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;
    }

}

सी - चाइल्ड पीओजेओ क्लास: पेजइन्फो

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;
    }

}

डी - बाल POJO वर्ग: पोस्ट

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;
    }

}

ई - नमूना JSON फ़ाइल: sampleJSONFile.json

मैंने अभी आपके JSON नमूने को इस फ़ाइल में कॉपी किया है और इसे प्रोजेक्ट फ़ोल्डर में रखा है।

{
   "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"
         }
    ]
}

एफ - डेमो कोड

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());
    }

}

जी - डेमो आउटपुट

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

मिनिमल-जोसन का उपयोग करें जो बहुत तेज़ और उपयोग में आसान है। आप स्ट्रिंग ओब्ज और स्ट्रीम से पार्स कर सकते हैं।

नमूना डेटा:

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

पार्स:

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

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>

पूजो कैसे दिखेगा?
जेसी

पूजो के लिए gson का उपयोग करें। यह पुस्तकालय समर्थन नहीं करता है।
साकिब समी

22

मेरा मानना ​​है कि सबसे अच्छा अभ्यास आधिकारिक जावा JSON एपीआई के माध्यम से जाना चाहिए जो अभी भी प्रगति पर हैं।


7
जब से मैंने उत्तर दिया, मैंने जैक्सन का उपयोग करना शुरू कर दिया और मुझे लगता है कि यह JSON de-serialization के लिए सर्वश्रेष्ठ पुस्तकालयों में से एक है।
गियोवन्नी बोटा

2
वे JSON का उपयोग पैडिंग के साथ JSON की तुलना में कुछ अलग करने के लिए क्यों करते हैं ? ...
क्रिस वेस्सलिंग

@ क्रिसहेलिंग क्या मतलब है आपका?
गियोवन्नी बोटा

"JSON प्रसंस्करण के लिए जावा एपीआई (JSON-P)" आपके द्वारा लिंक किए गए दस्तावेज़ का शीर्षक है। और इसने मुझे भ्रमित कर दिया, क्योंकि मुझे पता था कि JSONP का मतलब कुछ और है।
क्रिस वेसलिंग

1
@ क्रिसहेलिंग ओह, जो भ्रामक है। यही उन्होंने विनिर्देश के लिए चुना। हालाँकि जैसा कि मैंने कहा, मैं सीधे जैक्सन के पास जाऊंगा।
जियोवन्नी बोट्टा

22

चूंकि किसी ने अभी तक इसका उल्लेख नहीं किया है, यहां नैशॉर्न (जावा 8 के जावास्क्रिप्ट रनटाइम भाग का उपयोग करके समाधान की शुरुआत है , लेकिन जावा 11 में चित्रित किया गया है)।

समाधान

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));
}

प्रदर्शन की तुलना

मैंने JSON सामग्री को क्रमशः 20, 20 और 100 तत्वों के तीन सरणियों लिखा था। मैं केवल तीसरे सरणी से 100 तत्व प्राप्त करना चाहता हूं। मैं अपनी प्रविष्टियों को पार्स और प्राप्त करने के लिए निम्नलिखित जावास्क्रिप्ट फ़ंक्शन का उपयोग करता हूं।

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

नैशॉर्न का उपयोग करके कॉल को एक लाख बार चलाने पर 7.5 ~ 7.8 सेकंड लगते हैं

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

org.json को 20 ~ 21 सेकंड लगते हैं

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

जैक्सन को 6.5 ~ 7 सेकंड लगते हैं

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

इस मामले में जैक्सन नैशोर्न की तुलना में बेहतर प्रदर्शन करता है, जो org.json से बेहतर प्रदर्शन करता है। नैशर्न एपीआई ऑर्गन की तुलना में उपयोग करना कठिन है। जैसन या जैक्सन के। आपकी आवश्यकताओं के आधार पर जैक्सन और नैशॉर्न दोनों व्यवहार्य समाधान हो सकते हैं।


1
इकाई " "" क्या है ? इंच नहीं है? क्या यह सेकंड है? मिनट?
पीटर मोर्टेंसन

1
@PeterMortensen का अर्थ है सेकंड। चूंकि यह स्पष्ट नहीं है कि मैं इसे बदल दूंगा। समीक्षा के लिए धन्यवाद।
अक्टूबर

2
दुर्भाग्य से, Nashorn जावा 11 में हटाई गई है JEP 335
प्रति माइल्डनर

1
मुझे पता है कि नैशॉर्न पदावनत है, लेकिन मुझे यह जवाब पसंद आया क्योंकि मैं कोई निर्भरता नहीं चाहता था; हालाँकि, मुझे फिर से उदाहरण के लिए थोड़ा काम करना पड़ा: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

नीचे दिए गए उदाहरण से पता चलता है कि प्रश्न में पाठ को कैसे पढ़ना है, "jsonText" चर के रूप में दर्शाया गया है। यह समाधान जावा EE7 javax.json API का उपयोग करता है (जो कुछ अन्य उत्तरों में उल्लिखित है)। इसका कारण मैंने इसे एक अलग उत्तर के रूप में जोड़ा है, निम्नलिखित कोड से पता चलता है कि वास्तव में प्रश्न में दिखाए गए कुछ मूल्यों तक कैसे पहुंचा जाए। एक javax.json एपीआई के कार्यान्वयन के लिए इस कोड को चलाने के लिए की आवश्यकता होगी। आवश्यक कक्षाओं में से प्रत्येक के लिए पूरा पैकेज शामिल था क्योंकि मैं "आयात" बयानों की घोषणा नहीं करना चाहता था।

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");

अब, इससे पहले कि कोई भी इस जवाब को जाता है और इसे अस्वीकार कर देता है क्योंकि यह GSON, org.json, जैक्सन, या किसी भी अन्य 3 पार्टी फ्रेमवर्क का उपयोग नहीं करता है, यह प्रदान किए गए पाठ को पार्स करने के लिए प्रश्न के अनुसार "आवश्यक कोड" का एक उदाहरण है। मुझे अच्छी तरह पता है कि वर्तमान मानक JSR 353 का पालन JDK 9 के लिए नहीं माना जा रहा था और जैसे JSR 353 युक्ति को किसी अन्य तृतीय पक्ष JSON हैंडलिंग कार्यान्वयन के समान माना जाना चाहिए।


15

इसने मेरे दिमाग को उड़ा दिया कि यह कितना आसान था। आप Stringडिफ़ॉल्ट J.Oson पैकेज में JSONObject के कंस्ट्रक्टर को अपने JSON को होल्ड करने के लिए पास कर सकते हैं ।

JSONArray rootOfPage =  new JSONArray(JSONString);

किया हुआ। माइक्रोफोन छोड़ देता है । इसके साथ JSONObjectsही काम करता है । उसके बाद, आप बस अपनी वस्तुओं पर विधियों का Objectsउपयोग करने के अपने पदानुक्रम के माध्यम से देख सकते get()हैं।


13
JSONArrayप्रकार J2SE JDK एपीआई का हिस्सा नहीं है और आप कहते हैं कि नहीं है जो एपीआई या तीसरे पक्ष के पुस्तकालय इस प्रकार प्रदान करता है।
बोबुलस २४'१५

2
ऐसा नहीं है कि मैं इसे का उपयोग कर की सिफारिश करेंगे, लेकिन मैं इस से "org.json" पैकेज को संदर्भित करता है लगता है json.org/java । जावा पुस्तकालयों के उपलब्ध होने से पहले इसका उपयोग किया जाता था, लेकिन यह वर्षों पहले था (2008 या उससे पहले)
StaxMan

1
या brainmurphy1 का मतलब Android में JSONArray है?
अलेक्जेंडर फरबर

12

जावा में कई JSON लाइब्रेरी उपलब्ध हैं।

सबसे कुख्यात हैं: जैक्सन, जीएसओएन, गेंसन, फास्टजसन और ऑर्गन। जेसन।

आमतौर पर किसी भी पुस्तकालय को चुनने के लिए तीन चीजों पर ध्यान देना चाहिए:

  1. प्रदर्शन
  2. उपयोग में आसानी (कोड लिखना आसान और सुपाठ्य है) - जो सुविधाओं के साथ जाता है।
  3. मोबाइल एप्लिकेशन के लिए: निर्भरता / जार आकार

JSON पुस्तकालयों (और किसी भी क्रमांकन / deserialization libs) के लिए विशेष रूप से, डेटाबाइंडिंग भी आमतौर पर ब्याज की है क्योंकि यह डेटा को पैक / अनपैक करने के लिए बॉयलर-प्लेट कोड लिखने की आवश्यकता को हटा देता है।

1 के लिए, इस बेंचमार्क को देखें: https://github.com/fabienrenaud/java-json-benchmark मैंने JMH का उपयोग किया था , जो धारावाहिकों और deserializers धारावाहिकों का उपयोग करते हुए (जैक्सन, गन्सन, गेसन, fastjson, org.json, jsonp) की तुलना करता है। और डेटाबाइंड एपीआई। 2 के लिए, आप इंटरनेट पर कई उदाहरण पा सकते हैं। उपरोक्त बेंचमार्क का उपयोग उदाहरणों के स्रोत के रूप में भी किया जा सकता है ...

बेंचमार्क का त्वरित टेकअवे : जैक्सन , ओर्गन.जॉन से 5 से 6 गुना बेहतर प्रदर्शन करता है और जीएसओएन से दोगुना बेहतर है।

आपके विशेष उदाहरण के लिए, निम्न कोड आपके जैसन को जैकसन के साथ डिकोड करता है:

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.
    }
}

अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।


11

अन्य उत्तरों के अलावा, मैं इस ऑनलाइन ओपनसोर्स सेवा jsonschema2pojo.org को जीएसओएन, जैक्सन 1.x या जैक्सन 2.x के लिए json या json स्कीमा से त्वरित रूप से जावा वर्ग बनाने के लिए शुरू करता हूं। उदाहरण के लिए, यदि आपके पास:

{
   "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
         }
    ]
}

Jsonschema2pojo.org GSON के लिए उत्पन्न:

@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

यदि आपके पास JSON स्ट्रिंग (jsonString) का प्रतिनिधित्व करने वाले कुछ जावा वर्ग (कहते हैं कि संदेश) है, तो आप जैक्सन JSON लाइब्रेरी का उपयोग कर सकते हैं :

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

और संदेश ऑब्जेक्ट से आप इसकी किसी भी विशेषता को प्राप्त कर सकते हैं।


9

Gson सीखना और कार्यान्वित करना आसान है, जिसे हमें जानने की आवश्यकता है वह दो विधियों का पालन कर रहा है

  • toJson () - जावा ऑब्जेक्ट को JSON फॉर्मेट में कन्वर्ट करें

  • fromJson () - JSON को जावा ऑब्जेक्ट में बदलें

`

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();
    }

    }
}

`


Gson के बारे में पूरी जानकारी के लिए नीचे दिए गए लिंक देखें। github.com/google/gson/blob/master/UserGuide.md
venkat

9

JSON सामग्री को पार्स करने या सिर्फ JSON मान पढ़ने के लिए कई ओपन सोर्स लाइब्रेरी मौजूद हैं। आपकी आवश्यकता केवल मूल्यों को पढ़ने और कस्टम ऑब्जेक्ट पर पार्स करने की है। तो org.json पुस्तकालय आपके मामले में पर्याप्त है।

इसे पार्स करने और JsonObject बनाने के लिए org.json लाइब्रेरी का उपयोग करें:

JSONObject jsonObj = new JSONObject(<jsonStr>);

अब, अपने मूल्यों को प्राप्त करने के लिए इस वस्तु का उपयोग करें:

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

आप यहां एक पूरा उदाहरण देख सकते हैं:

जावा में JSON को पार्स कैसे करें


ऐसा लगता है कि आपके सभी उत्तरों में उस साइट का लिंक है। यदि यह स्पैम है, तो कृपया रोकें। यदि यह नहीं है, तो भ्रम के लिए खेद है, लेकिन मुझे नहीं लगता कि आपके सभी उत्तरों में लिंक पोस्ट करना आवश्यक है।
डोनाल्ड डक

1
इसका जवाब देना कठिन है, जहां आप सभी परिदृश्यों की व्याख्या कर सकते हैं। जैसे इस मामले में, json array या multiple json Objects कैसे पढ़ें। अगर मैं ऐसा करता हूं, तो भी उत्तर बहुत लंबा होगा और व्यक्ति भ्रमित हो सकता है। इसलिए मैं एक लिंक देता हूं जहां उचित उदाहरण के साथ उचित स्पष्टीकरण दिया जाता है। वह यात्रा करने के लिए चुना जा सकता है या केवल मेरे स्पष्टीकरण का उपयोग कर सकता है।
ललिताभगत

1
यह मुझे प्रतीत होता है कि आपके द्वारा प्रदान किया गया लिंक केवल JSON पढ़ने के तरीके को दर्शाता है। मुझे JSON के साथ-साथ कैसे जानकारी मिल सकती है?
लैम्प्रोस टेज़ेटोस

क्षमा करें, लेकिन मुझे आपका प्रश्न समझ में नहीं आया: - "JSON कैसे करें" पर
lalitbhagtani

7

कृपया ऐसा कुछ करें:

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

10
एर, यह कौन सी लाइब्रेरी है?
स्टीवर्ट

2
मुझे लगता है कि वह org.json.simple
Lasitha Yapa

7

आप JSON स्ट्रिंग को पार्स करने के लिए Gson लाइब्रेरी का उपयोग कर सकते हैं।

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();

आप "पोस्ट" सरणी के माध्यम से भी लूप कर सकते हैं:

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
कृपया अपना उत्तर बताएं क्योंकि कोड-ओनली उत्तर दूसरों को अच्छी तरह से प्रलेखित कोड से कम मदद करते हैं। देखें "एक आदमी को एक मछली दें और आप उसे एक दिन के लिए खिलाएं; एक आदमी को मछली सिखाएं और आप उसे जीवन भर खिलाएं"
वाई हा ली

यह उल्लेख करना अच्छा होगा कि यह 'org.json' के लिए है। हालाँकि, मुझे नहीं लगता कि यह सब करने की क्रिया है, और 'org.json' का अपने आप अप्रचलित (धीमा, बोझिल एपीआई) होने का एक अच्छा तरीका है। बेहतर विकल्प हैं: GSON, जैक्सन, बून, गेंसन का उपयोग करने के लिए।
18ax में StaxMan

5

निम्नलिखित ब्लॉग पोस्ट, जावा में JSON पढ़ें ।

यह पोस्ट थोड़ी पुरानी है, लेकिन फिर भी मैं आपको सवाल का जवाब देना चाहता हूं।

चरण 1: अपने डेटा का एक POJO वर्ग बनाएं।

चरण 2: अब JSON का उपयोग करके एक ऑब्जेक्ट बनाएं।

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

आगे के संदर्भ के लिए आप निम्न लिंक का उल्लेख कर सकते हैं ।


4

इस पृष्ठ पर शीर्ष उत्तर एक संपत्ति (जैसे {नाम: मूल्य}) के साथ ऑब्जेक्ट जैसे सरल उदाहरणों का उपयोग करते हैं। मुझे लगता है कि अभी भी सरल लेकिन वास्तविक जीवन उदाहरण किसी की मदद कर सकता है।

तो यह Google अनुवाद API द्वारा दिया गया JSON है:

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

मैं Google के Gson का उपयोग करके "TranslateText" विशेषता जैसे "Arbeit" का मान पुनः प्राप्त करना चाहता हूं।

दो संभावित दृष्टिकोण:

  1. केवल एक आवश्यक विशेषता प्राप्त करें

    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. 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

पहले आपको ऐसा करने के लिए कार्यान्वयन लाइब्रेरी का चयन करना होगा।

JSON प्रोसेसिंग (JSR 353) के लिए जावा एपीआई पार्स करने के लिए पोर्टेबल एपीआई प्रदान करता है, उत्पन्न, को बदलने, और क्वेरी JSON ऑब्जेक्ट मॉडल का उपयोग कर और एपीआई स्ट्रीमिंग।

संदर्भ कार्यान्वयन यहाँ है: https://jsonp.java.net/

यहां आप JSR 353 के कार्यान्वयन की एक सूची पा सकते हैं :

जेएसआर -353 (JSON) को लागू करने वाले एपीआई क्या हैं

और आपको तय करने में मदद करने के लिए ... मुझे यह लेख भी मिला:

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

यदि आप जैक्सन के लिए जाते हैं, तो यहां जैसन / से जावा के बीच जैक्सन का उपयोग करके रूपांतरण के बारे में एक अच्छा लेख है: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- जैक्सन /

आशा है ये मदद करेगा!


आप जैक्सन लाइब्रेरी के संस्करण 1 की ओर इशारा कर रहे हैं। जैक्सन लाइब्रेरी के वर्तमान संस्करण का उपयोग करने के लिए दृढ़ता से सुझाव दें।
हर्बर्ट यू

4

आप Jayway JsonPath का उपयोग कर सकते हैं । नीचे सोर्स कोड, पोम डिटेल्स और अच्छे डॉक्यूमेंट के साथ GitHub लिंक दिया गया है।

https://github.com/jayway/JsonPath

कृपया नीचे दिए गए चरणों का पालन करें।

चरण 1 : मावेन का उपयोग करके अपने वर्ग पथ में jayway JSON पथ निर्भरता जोड़ें या JAR फ़ाइल डाउनलोड करें और इसे मैन्युअल रूप से जोड़ें।

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

चरण 2 : कृपया इस उदाहरण के लिए फ़ाइल के रूप में अपना इनपुट JSON सहेजें। मेरे मामले में मैंने नमूना JSON.txt के रूप में आपके JSON को बचाया। नोट करें कि आप pageInfo और पोस्ट के बीच अल्पविराम से चूक गए हैं।

चरण 3 : बफर फाइल का उपयोग करके उपरोक्त फ़ाइल से JSON सामग्री पढ़ें और इसे स्ट्रिंग के रूप में सहेजें।

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();

चरण 4 : अपने JSON स्ट्रिंग को Jayway JSON पार्सर का उपयोग करके पार्स करें।

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

चरण 5 : नीचे दिए गए विवरणों को पढ़ें।

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);

उत्पादन होगा :

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

3

मेरे पास JSON ऐसा है:

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

जावा वर्ग

class PageInfo {

    private String pageName;
    private String pagePic;

    // Getters and setters
}

इस JSON को जावा वर्ग में परिवर्तित करने के लिए कोड।

    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

एक JSON फ़ाइलों की संरचना का प्रतिनिधित्व करने वाले जावा मॉडल कक्षाएं बनाने के लिए Apache @Model एनोटेशन का उपयोग कर सकता है और JSON पेड़ में विभिन्न तत्वों का उपयोग करने के लिए उनका उपयोग कर सकता है । अन्य समाधानों के विपरीत यह पूरी तरह से प्रतिबिंब के बिना काम करता है और इस प्रकार उन वातावरणों के लिए उपयुक्त है जहां प्रतिबिंब असंभव है या महत्वपूर्ण ओवरहेड के साथ आता है।

उपयोग दिखाने वाला एक नमूना मावेन परियोजना है । सबसे पहले यह संरचना को परिभाषित करता है:

@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 {
    }
}

और फिर यह प्रदान किए गए इनपुट स्ट्रीम को पार्स करने के लिए उत्पन्न रिपॉजिटरीइन्फो और ओनर कक्षाओं का उपयोग करता है और ऐसा करते समय कुछ जानकारी उठाता है:

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()
    );
})

बस इतना ही! इसके अतिरिक्त यहाँ एक लाइव जिस्ट है जो एसिंक्रोनस नेटवर्क संचार के साथ समान उदाहरण दिखाता है।


2

jsoniter(jsoniterator) एक अपेक्षाकृत नया और सरल json पुस्तकालय है, जिसे सरल और तेज़ बनाया गया है। आपको जोसन डेटा को डिसेर्बलाइज करने की आवश्यकता है

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

जहाँ jsonDatajson डेटा की एक स्ट्रिंग है।

की जाँच करें आधिकारिक वेबसाइट अधिक जानकारी के लिए।


1

हम JSON स्ट्रिंग को JSON ऑब्जेक्ट में परिवर्तित करने और JSON ऑब्जेक्ट पर पुनरावृति करने के लिए JSONObject क्लास का उपयोग कर सकते हैं। निम्नलिखित कोड का उपयोग करें।

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
यह केवल एंड्रॉइड है
omubomír

यह सिर्फ android नहीं है: docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
Dermot Canniffe

1
@DermotCanniffe यह सिर्फ एंड्रॉइड है।
user4020527

1

आप डीएसएम का उपयोग कर सकते हैं जटिल json और XML दस्तावेज़ पार्स करने के लिए स्ट्रीम पार्सिंग लाइब्रेरी का । DSM केवल एक बार डेटा पार्स करता है और सभी डेटा को मेमोरी में लोड नहीं करता है।

मान लें कि हमारे पास दिए गए json डेटा को डिसेर्बलाइज करने के लिए पेज क्लास है।

पृष्ठ वर्ग

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

    // getter/setter

}

एक yaml मैपिंग फ़ाइल बनाएँ।

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

खेतों को निकालने के लिए DSM का उपयोग करें।

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");

पृष्ठ चर को json के लिए क्रमबद्ध:

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

DSM जटिल json और xml के लिए बहुत अच्छा है।


0

आप JsonNodeअपने JSON स्ट्रिंग के संरचित ट्री प्रतिनिधित्व के लिए उपयोग कर सकते हैं । यह रॉक सॉलिड जैकसन लाइब्रेरी का हिस्सा है जो सर्वव्यापी है।

ObjectMapper mapper = new ObjectMapper();
JsonNode yourObj = mapper.readTree("{\"k\":\"v\"}");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.