Hoe u JSOSTRING naar JSONOBJECT in Java

Ik heb string variabele genaamd jsonString:

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

Nu wil ik het converteren naar JSON-object. Ik heb meer gezocht op Google, maar kreeg geen verwachte antwoorden!


1, Autoriteit 100%

org.json bibliotheek:

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

2, Autoriteit 24%

Naar iedereen die nog steeds op zoek is naar een antwoord:

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

3, Autoriteit 7%

U kunt google-gsongebruiken. Details:

Object Voorbeelden

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

(serialisatie)

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

Merk op dat u objecten niet kunt serialiseren met cirkelvormige referenties, omdat dit zal resulteren in oneindige recursie.

(Deserialization)

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

Nog een voorbeeld voor GSY:

GSON is eenvoudig te leren en implementeren, u moet weten, is de volgende twee methoden:

– & GT; tojson () – Converteer Java-object naar JSON-indeling

– & GT; Fromjson () – Converteer JSON in Java-object

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

output

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

bronnen:

Google GSON-project startpagina

GSON gebruikershandleiding

Voorbeeld


4, Autoriteit 6%

Er zijn verschillende Java JSON Serializers en deserializers gekoppeld aan de JSON startpagina .

Vanaf dit schrijven zijn er deze 22:

…maar de lijst kan natuurlijk veranderen.


Antwoord 5, autoriteit 3%

Java 7-oplossing

import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;


Antwoord 6, autoriteit 3%

Om Stringnaar JSONObjectte converteren, hoeft u alleen de String-instantie door te geven aan Constructor van JSONObject.

Bijvoorbeeld:

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

Antwoord 7, autoriteit 2%

String naar JSONmet Jacksonmet com.fasterxml.jackson.databind:

Ervan uitgaande dat uw json-string als volgt vertegenwoordigt: 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();

Antwoord 8

Ik gebruik hiervoor graag google-gson, en dat is precies omdat ik niet rechtstreeks met JSONObject hoef te werken.

In dat geval zou ik een klasse hebben die overeenkomt met de eigenschappen van uw JSON-object

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

Ik denk echter dat uw vraag meer is als: Hoe krijg ik een echt JSONObject-object van een JSON-string.

Ik keek naar de google-json-api en kon niets zo eenvoudig vinden als
org.json’s api, wat waarschijnlijk is wat je wilt gebruiken als je zo’n grote behoefte hebt aan een barebones JSONObject.

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

Met org.json.JSONObject (nog een totaal andere API) Als je iets wilt doen als…

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

Ik denk dat het mooie van google-gson is dat je niet met JSONObject om hoeft te gaan. Je pakt gewoon json, geeft de klasse door waarin je wilt deserialiseren, en je klasse-attributen worden afgestemd op de JSON, maar nogmaals, iedereen heeft zijn eigen vereisten, misschien kun je je de luxe niet veroorloven om vooraf toegewezen klassen te hebben op de deserialiserende kant omdat dingen misschien te dynamisch zijn aan de kant van JSON Generating. Gebruik in dat geval gewoon json.org.


Antwoord 9

je moet org.json importeren

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

Antwoord 10

Codehaus Jackson– Ik ben deze geweldige API sinds 2012 voor mijn RESTful webservice en JUnit-tests. Met hun API kunt u:

(1) Converteer JSON String naar Java bean

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

(2) Converteer JSON String naar JSON-object (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) Converteer Java-bean naar JSON String

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

REFS:

  1. Codehaus Jackson

  2. JsonNode-API– Waarden van een JsonNode-object gebruiken, navigeren, ontleden en evalueren

  3. Tutorial– Eenvoudige tutorial hoe Jackson te gebruiken om JSON te converteren tekenreeks naar JsonNode


Antwoord 11

String converteren naar JSON-object met behulp van org.json.simple.jsonobject

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

12

Als u http://json-lib.sourceforge.net gebruikt
(net.sf.json.jsonobject)

Het is vrij eenvoudig:

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

of

JSONObject json = JSONSerializer.toJSON(myJsonString);

Verkrijg de waarden dan met
JSON.getstring (Param), JSON.Getint (Param) enzovoort.


13

Om een ​​string naar JSON te converteren en de sting is als JSON. {“phonetype”: “N95”, “Cat”: “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);

14

Gebruik JSONNODE van Fasterxml voor de generieke JSON-parsering. Het maakt intern een kaart van de sleutelwaarde voor alle ingangen.

Voorbeeld:

private void test(@RequestBody JsonNode node)

invoertekenreeks:

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

Antwoord 15

Het is niet nodig om een externe bibliotheek te gebruiken.

U kunt in plaats daarvan deze klasse gebruiken 🙂(verwerkt zelfs lijsten, geneste lijsten en 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;
    }
}

Gebruik dit om uw JSON-tekenreeks naar hashmapte converteren:

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

Antwoord 16

LET OP dat GSON met het deserialiseren van een interface zal resulteren in een uitzondering zoals hieronder.

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

Terwijl deserialiseren; GSON weet niet welk object moet worden geïntantieerd voor die interface.

Dit is hierop de een of andere manier opgelost .

Echter FlexJSONheeft deze oplossing inherent. terwijl de tijd wordt geserialiseerd, wordt de klassenaam toegevoegd als onderdeel van json, zoals hieronder.

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

dus JSON zal SECUMER zijn; Maar u hoeft niet te schrijven InstanceCreatordie vereist is in GSO.


17

org.json

Als u een tekenreeks hebt met JSON Format-tekst, kunt u JSON-object doorgaan met de volgende stappen:

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

Nu toegang tot het fonetype

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

18

Voor het instellen van JSON Single Object to List
IE

"locations":{
}

In naar List<Location>

Gebruik

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

jackson.mappper-asl-1.9.7.jar

Other episodes