जावा में JSONString को JSONObject में कैसे बदलें


423

मेरे पास स्ट्रिंग चर है jsonString:

{"phonetype":"N95","cat":"WP"}

अब मैं इसे JSON ऑब्जेक्ट में बदलना चाहता हूं। मैंने Google पर और खोज की लेकिन कोई अपेक्षित उत्तर नहीं मिला ...


1
इसका कोई अधिकार नहीं है, क्योंकि मैं json string से json ऑब्जेक्ट बनाना चाहता था, dogbane द्वारा दिए गए उत्तर ने जवाब देने के लिए सही ट्रैक दिखाया।
श्री साजिद शेख

मप्पन और डॉगबेन दोनों के उत्तर सही हैं लेकिन वे विभिन्न मॉड्यूल का उपयोग कर रहे हैं। आपको हर एक के लिए सही मॉड्यूल आयात करने के लिए सावधान रहना चाहिए क्योंकि कई JSONObject मॉड्यूल हैं।
अरासॉफ्ट

मैंने GSON लाइब्रेरी के साथ प्रयास किया। कृपया इस लिंक को देखें
तिरुमलवलवन

यहां एक छोटा वीडियो है जो दर्शाता है कि org.json का उपयोग करके जावा में JSONObject कैसे बनाया जाता है।
drww

जवाबों:


677

Org.json लाइब्रेरी का उपयोग करना :

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Error", err.toString());
}

7
मैंने इस तरह की कोशिश की कि JSONObject js = new JSONObject (jsonstring); लेकिन यह त्रुटि दिखाता है। jsonstring पर
श्री साजिद शेख

29
उसे एक त्रुटि मिली क्योंकि वह org.json का उपयोग नहीं कर रहा है, वह google-gson का उपयोग कर रहा है जो उस तरह से काम नहीं करता है।
गुबाट्रोन

2
@Gubatron धन्यवाद दोस्त आप सही हैं, मैंने अभी इसे डाउनलोड किया है और जार बनाते हैं इसलिए अब इसका काम ठीक है।
श्री साजिद शेख

3
@dogbane क्या होगा अगर मुझे स्ट्रिंग की संरचना का पता नहीं है। अधिक स्पष्ट रूप से, मैं एक गतिशील उत्पन्न jsonString को jsonObject में कैसे बदल सकता हूं?
सौम्यराज

70
Google-gson का उपयोग करके आप इसे इस तरह से कर सकते हैं:JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
kazy

163

जवाब की तलाश में किसी को भी:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

23
और क्या आप कृपया उल्लेख कर सकते हैं कि कौन सा पैकेज उसी के लिए आयात करना है?
gonephishing

10
यह मेरे लिए काम कर रहा है:import org.json.simple.JSONObject
मफरो 34

1
संस्करण 1.1.1 के json- सरल कुछ समस्या है लगता है। उपरोक्त "अनहैंडल्ड एक्सेप्शन" देता है parser.parse(और ट्राय -कैच या थ्रो चाहता है। लेकिन जब आप या तो एक जोड़ते हैं, तो यह एक Unhandled exception type ParseExceptionत्रुटि देता है , या NoClassDefFound त्रुटि ParseException के लिए org.json.simple.parserतब भी जब आपके पास Maven अवसादों में json-simple है और प्रोजेक्ट की लाइब्रेरी में स्पष्ट रूप से दिखाई देता है।
जूहा अन्टिनन

2
org.json एक प्रूफ-ऑफ-कॉन्सेप्ट लाइब्रेरी है। यह प्रदर्शन और सुविधाओं के मामले में सबसे खराब है। एक को चुनने से पहले एक json lib का फीचर सेट और प्रदर्शन देखना चाहिए। इस बेंचमार्क को देखें जो मैंने JMH का उपयोग किया था: github.com/fabienrenaud/java-json-benchmark यह स्पष्ट रूप से जैकसन को किसी भी चीज़ से तेज दिखाता है और org.json की तुलना में 5 से 6 गुना तेज है।
फबिएन

5
JSONParser parser = नया JSONParser ();
वंचित

46

आप उपयोग कर सकते हैं google-gson। विवरण:

वस्तु उदाहरण

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(क्रमबद्धता)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

ध्यान दें कि आप वस्तुओं को गोलाकार संदर्भों के साथ अनुक्रमित नहीं कर सकते हैं क्योंकि इससे अनंत पुनरावृत्ति होगी।

(Deserialization)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj

Gson के लिए एक और उदाहरण:

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

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

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

import com.google.gson.Gson;

public class TestObjectToJson {
  private int data1 = 100;
  private String data2 = "hello";

  public static void main(String[] args) {
      TestObjectToJson obj = new TestObjectToJson();
      Gson gson = new Gson();

      //convert java object to JSON format
      String json = gson.toJson(obj);

      System.out.println(json);
  }

}

उत्पादन

{"data1":100,"data2":"hello"}

संसाधन:

Google Gson प्रोजेक्ट होम पेज

Gson उपयोगकर्ता गाइड

उदाहरण


"यदि आप क्लाइंट की ओर से प्रक्रिया करने के लिए कह रहे हैं तो यह आपकी प्रोग्रामिंग भाषा पर निर्भर करता है। उदाहरण के लिए जावा के साथ आप google-gson का उपयोग कर सकते हैं" मुझे लगता है कि आपको "क्लाइंट" के बजाय "सर्वर" का मतलब था। और उन्होंने अपने सवाल "जावा" को टैग किया।
टीजे क्राउडर

+1। मैंने 4-5 परियोजनाओं में अब Gson का उपयोग किया है, काफी अलग संदर्भों में, सर्वर और क्लाइंट पक्ष (एंड्रॉइड ऐप में भी), और यह मुझे कभी विफल नहीं हुआ है। बहुत अच्छा और साफ काम।
जोनीक

यदि आप gson का उपयोग करना चाहते हैं, लेकिन आपके पास पहले से परिभाषित POJO वर्ग नहीं है (यानी आपके पास एक पूर्व परिभाषित संरचना के बिना एक सामान्य जंक्सन है), तो यह उत्तर मदद कर सकता है - stackoverflow.com/questions/4110664/…
Leandro David

40

JSON होम पेज से विभिन्न Java JSON सीरियलाइज़र और deserializers जुड़े हुए हैं ।

इस लेखन के रूप में, ये 22 हैं:

... लेकिन निश्चित रूप से सूची बदल सकती है।


24

जावा 7 समाधान

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;


5
इस लाइब्रेरी में उन सभी का सबसे खराब प्रदर्शन है। इस बेंचमार्क मैं JMH के साथ किया था देखें: github.com/fabienrenaud/java-json-benchmark
Fabien

15

आप Stringमें परिवर्तित करने के लिए JSONObjectबस Stringउदाहरण को कंस्ट्रक्टर में पास करना होगा JSONObject

उदाहरण के लिए:

JSONObject jsonObj = new JSONObject("your string");

10

मुझे इसके लिए google-gson का उपयोग करना पसंद है, और यह ठीक है क्योंकि मुझे सीधे JSONObject के साथ काम करने की आवश्यकता नहीं है।

उस स्थिति में मेरे पास एक वर्ग होगा जो आपके JSON ऑब्जेक्ट के गुणों के अनुरूप होगा

class Phone {
 public String phonetype;
 public String cat;
}


...
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
...

हालाँकि, मुझे लगता है कि आपका प्रश्न अधिक है, मैं एक JSON स्ट्रिंग से एक वास्तविक JSONObject ऑब्जेक्ट के साथ कैसे अंत कर सकता हूं।

मैं google-json api को देख रहा था और org.json की एपीआई के रूप में सीधे आगे कुछ भी नहीं पा रहा था, जो कि शायद आप जो उपयोग करना चाहते हैं यदि आप नंगे पैर JSONObject का उपयोग करने के लिए बहुत दृढ़ता से कर रहे हैं।

http://www.json.org/javadoc/org/json/JSONObject.html

Org.json.JSONObject (एक और पूरी तरह से अलग एपीआई) के साथ यदि आप कुछ ऐसा करना चाहते हैं ...

JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));

मुझे लगता है कि google-gson की सुंदरता यह है कि आपको JSONObject से निपटने की आवश्यकता नहीं है। आप सिर्फ जसन को पकड़ते हैं, कक्षा में प्रवेश पाने के इच्छुक हैं, और आपकी कक्षा की विशेषताओं को JSON से मिलान किया जाएगा, लेकिन फिर से, हर किसी की अपनी आवश्यकताएं होती हैं, हो सकता है कि आप पूर्व-मैप की गई कक्षाओं के लिए विलासिता का खर्च नहीं उठा सकते। डेसर्निलाइज़िंग पक्ष क्योंकि JSON जनरेटिंग साइड पर चीज़ें बहुत अधिक गतिशील हो सकती हैं। उस स्थिति में सिर्फ json.org का उपयोग करें।


8

आपको org.json आयात करना होगा

JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
        } catch (JSONException e) {
            e.printStackTrace();
        }

8

स्ट्रिंग केJackson साथ JSON का उपयोग करना com.fasterxml.jackson.databind:

अपने json-string को इस रूप में दर्शाता है: jsonString = {"phonetype": "N95", "cat": "WP"}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * Simple code exmpl
 */
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
String phoneType = node.get("phonetype").asText();
String cat = node.get("cat").asText();

3

यदि आप http://json-lib.sourceforge.net (net.sf.json.JSONObject) का उपयोग कर रहे हैं

यह बहुत आसान है:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

या

JSONObject json = JSONSerializer.toJSON(myJsonString);

मान तब json.getString (परम), json.getInt (परम) और इसी तरह से प्राप्त करें।


JSONObject json = JSONSerializer.toJSON (myJsonString); प्रकार के बेमेल का निर्माण करेगा एक अन्य काम करता है
हेनरिक सी।

3

स्ट्रिंग को जोंस में बदलने के लिए और स्टिंग जसन की तरह है। { "PHONETYPE": "N95" "बिल्ली": "WP"}

String Data=response.getEntity().getText().toString(); // reading the string value 
JSONObject json = (JSONObject) new JSONParser().parse(Data);
String x=(String) json.get("phonetype");
System.out.println("Check Data"+x);
String y=(String) json.get("cat");
System.out.println("Check Data"+y);

JSONParser क्या है? क्या यह केवल संपर्क प्रदाता का हिस्सा है?
इगोरगानपोलस्की

1
@IgorGanapolsky JSONParser एक विकल्प है जो सरल JSON द्वारा प्रदान किया जाता है। ऐसा करने के लिए, json-simple-1.1.1.jar
Aravind Cheekkallur

3

जेनेरिक पार्सिंग के लिए fastxml के JsonNode का उपयोग करें। यह आंतरिक रूप से सभी इनपुट के लिए मुख्य मूल्य का एक मानचित्र बनाता है।

उदाहरण:

private void test(@RequestBody JsonNode node)

इनपुट स्ट्रिंग :

{"a":"b","c":"d"}

2

किसी भी बाहरी पुस्तकालय का उपयोग करने की आवश्यकता नहीं है।

आप इसके बजाय इस वर्ग का उपयोग कर सकते हैं :) (यहां तक ​​कि सूचियों, नेस्टेड सूचियों और json को भी संभालता है)

public class Utility {

    public static Map<String, Object> jsonToMap(Object json) throws JSONException {

        if(json instanceof JSONObject)
            return _jsonToMap_((JSONObject)json) ;

        else if (json instanceof String)
        {
            JSONObject jsonObject = new JSONObject((String)json) ;
            return _jsonToMap_(jsonObject) ;
        }
        return null ;
    }


   private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;
    }


    private static Map<String, Object> toMap(JSONObject object) throws JSONException {
        Map<String, Object> map = new HashMap<String, Object>();

        Iterator<String> keysItr = object.keys();
        while(keysItr.hasNext()) {
            String key = keysItr.next();
            Object value = object.get(key);

            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;
    }


    public static List<Object> toList(JSONArray array) throws JSONException {
        List<Object> list = new ArrayList<Object>();
        for(int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }
}

अपने JSON स्ट्रिंग को हैशमैप में बदलने के लिए इसका उपयोग करें:

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(

2

कोडहॉस जैक्सन - मैं 2012 के बाद से अपने रैस्टफुल वेबसर्विस और ज्यूनीट परीक्षणों के लिए यह भयानक एपीआई रहा हूं। उनके एपीआई के साथ, आप कर सकते हैं:

(1) JSON स्ट्रिंग को जावा बीन में बदलें

public static String beanToJSONString(Object myJavaBean) throws Exception {
    ObjectMapper jacksonObjMapper = new ObjectMapper();
    return jacksonObjMapper.writeValueAsString(myJavaBean);
}

(2) JSON स्ट्रिंग को JSON ऑब्जेक्ट (JsonNode) में बदलें

public static JsonNode stringToJSONObject(String jsonString) throws Exception {
    ObjectMapper jacksonObjMapper = new ObjectMapper();
    return jacksonObjMapper.readTree(jsonString);
}

//Example:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";   
JsonNode jsonNode = stringToJSONObject(jsonString);
Assert.assertEquals("Phonetype value not legit!", "N95", jsonNode.get("phonetype").getTextValue());
Assert.assertEquals("Cat value is tragic!", "WP", jsonNode.get("cat").getTextValue());

(3) जावा बीन को JSON स्ट्रिंग में कनवर्ट करें

    public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
    ObjectMapper jacksonObjMapper = new ObjectMapper();
    return jacksonObjMapper.readValue(JSONString, beanClass);
}

refs:

  1. कोडहॉस जैक्सन

  2. JsonNode API - JsonNode ऑब्जेक्ट से मानों का उपयोग, नेविगेट, पार्स और मूल्यांकन कैसे करें

  3. ट्यूटोरियल - सरल ट्यूटोरियल जैक्सन स्ट्रिंग को JsonNode में बदलने के लिए जैक्सन का उपयोग कैसे करें


1

ध्यान दें कि इंटरफ़ेस को डीसर्विसलाइज़ करने के साथ GSON नीचे की तरह अपवाद देगा।

"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

जबकि deserialize; जीएसओएन को यह नहीं पता होता है कि उस इंटरफ़ेस के लिए किस ऑब्जेक्ट को इंटिनेटेड किया जाना है।

यह किसी भी तरह यहाँ हल है

हालाँकि FlexJSON का यह समाधान स्वाभाविक है। जबकि क्रमबद्ध समय यह नीचे की तरह json के भाग के रूप में वर्ग नाम जोड़ रहा है।

{
    "HTTPStatus": "OK",
    "class": "com.XXX.YYY.HTTPViewResponse",
    "code": null,
    "outputContext": {
        "class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
        "eligible": true
    }
}

तो JSON कुछ मौखिक हो जाएगा; लेकिन आपको लिखने की आवश्यकता नहीं है InstanceCreatorजो कि GSON में आवश्यक है।


1

Org.json का उपयोग करना

यदि आपके पास एक स्ट्रिंग है जिसमें JSON प्रारूप पाठ है, तो आप निम्न चरणों का पालन करके JSON ऑब्जेक्ट प्राप्त कर सकते हैं:

String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
    try {
        jsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

अब फोनटाइप का उपयोग करने के लिए

Sysout.out.println(jsonObject.getString("phonetype"));

0

सूची के लिए एकल वस्तु सेट करने के लिए यानी

"locations":{

}

में List<Location>

उपयोग

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-ASL-1.9.7.jar


0

Org.json.simple.JSONObject का उपयोग करके JSON ऑब्जेक्ट को स्ट्रिंग परिवर्तित करना

private static JSONObject createJSONObject(String jsonString){
    JSONObject  jsonObject=new JSONObject();
    JSONParser jsonParser=new  JSONParser();
    if ((jsonString != null) && !(jsonString.isEmpty())) {
        try {
            jsonObject=(JSONObject) jsonParser.parse(jsonString);
        } catch (org.json.simple.parser.ParseException e) {
            e.printStackTrace();
        }
    }
    return jsonObject;
}

-1

बेहतर काम का उपयोग करके अधिक सरल तरीके के साथ जाओ org.json। बस नीचे के रूप में एक बहुत ही सरल तरीका है:

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

अब आपके संबंधित स्ट्रिंग objका आपका परिवर्तित JSONObjectरूप है। यदि आपके पास नाम-मूल्य जोड़े हैं तो यह स्थिति में है।

एक स्ट्रिंग के लिए आप सीधे कंस्ट्रक्टर के पास जा सकते हैं JSONObject। यदि यह वैध होगा json String, तो ठीक है अन्यथा यह एक अपवाद फेंक देगा।


वास्तव में आपने जो लिखा है वह कर रहा है: user.put("email", "someemail@mail.com")एक अखंड अपवाद को ट्रिगर करता है।
सेबेस्टियलोनसो

1
@ एसबास्टियलोनो हां, आपको अपवाद को पकड़ने की आवश्यकता है। इस तरह:try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}
TheLittleNaruto

@vidya नहीं यह नहीं है। फिर से तुलना करने पर विचार करें।
द लिटिलनारुतो

@ विद्या ज़रूर यार
TheLittleNaruto
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.