Pregunta Decodificación de cadena JSON en Java


Soy nuevo en el uso de la biblioteca json-simple en Java y he pasado por el codificación y descodificación muestras. La duplicación de los ejemplos de codificación estaba bien, pero no he podido obtener los decodificadores para que funcionen con el tipo mixto JSON.

Uno de mis problemas es que hay demasiadas clases en la biblioteca que no están debidamente documentadas, y para las cuales no tengo la fuente (para poder leer y comprender su propósito). En consecuencia, estoy luchando por comprender cómo usar muchas de estas clases.

Después de leer este ejemplo:

String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
JSONParser parser = new JSONParser();

ContainerFactory containerFactory = new ContainerFactory(){
    public List creatArrayContainer() {
        return new LinkedList();
    }

    public Map createObjectContainer() {
        return new LinkedHashMap();
    }                     
};

try {
    Map json = (Map)parser.parse(jsonText, containerFactory);
    Iterator iter = json.entrySet().iterator();
    System.out.println("==iterate result==");

    while(iter.hasNext()) {
        Map.Entry entry = (Map.Entry)iter.next();
        System.out.println(entry.getKey() + "=>" + entry.getValue());
    }

    System.out.println("==toJSONString()==");
    System.out.println(JSONValue.toJSONString(json));
} catch(ParseException pe) {
    System.out.println(pe);
}

desde el tutorial de decodificación oficial json-simple, Intenté decodificar este JSON:

{
"stat":{
    "sdr": "MAC address of FLYPORT",
    "rcv": "ff:ff:ff:ff:ff:ff",
    "time": "0000000000000",
    "type": 0,
    "subt": 0,
    "argv": [
        {"type": "6","val": "NetbiosName"},
        {"type": "6","val": "MACaddrFlyport"},
        {"type": "6","val": "FlyportModel"},
        {"type": "1","val": id}
    ]
}
}

Estoy escribiendo el siguiente código para decodificar:

    String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{1,2},{2,3}]}}";
    JSONObject jsonObject = new JSONObject(jsonString);
    JSONObject newJSON = jsonObject.getJSONObject("stat");
    System.out.println(newJSON);

Pero no funciona. De hecho, tampoco pude obtener el ejemplo sin modificar, y los autores originales no han explicado su código.

¿Cuál es la forma más fácil de decodificar este JSON como se muestra?


14
2018-05-15 20:34


origen


Respuestas:


Este es el mejor y más fácil código:

public class test
{
    public static void main(String str[])
    {
        String jsonString = "{\"stat\": { \"sdr\": \"aa:bb:cc:dd:ee:ff\", \"rcv\": \"aa:bb:cc:dd:ee:ff\", \"time\": \"UTC in millis\", \"type\": 1, \"subt\": 1, \"argv\": [{\"type\": 1, \"val\":\"stackoverflow\"}]}}";
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONObject newJSON = jsonObject.getJSONObject("stat");
        System.out.println(newJSON.toString());
        jsonObject = new JSONObject(newJSON.toString());
        System.out.println(jsonObject.getString("rcv"));
       System.out.println(jsonObject.getJSONArray("argv"));
    }
}

los la definición de biblioteca de los archivos json se da aquí. Y no son las mismas bibliotecas que las publicadas aquí, es decir, publicado por usted. Lo que publicaste fue biblioteca json simple He usado esta biblioteca.

Usted puede descarga el zip. Y luego crea un package en tu proyecto con org.json como nombre y pegue todos los códigos descargados y diviértase.

Siento que esta es la mejor y más fácil descodificación JSON.


18
2018-05-16 11:20



Bueno, tu jsonString está mal.

String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{\"1\":2},{\"2\":3}]}}";

utilizar esta jsonString y si usas el mismo JSONParser y ContainerFactory en el ejemplo, verá que se codificará / decodificará.

Además, si desea imprimir su cadena después stat aquí va:

     try{
        Map json = (Map)parser.parse(jsonString, containerFactory);
        Iterator iter = json.entrySet().iterator();
        System.out.println("==iterate result==");
        Object entry = json.get("stat");
        System.out.println(entry);
      }

Y sobre las bibliotecas json, hay muchas de ellas. Mejor que revises esta.


4
2018-05-16 07:48



En lugar de descargar archivos java separados como lo sugirió Veer, podría agregar esto Archivo JAR a tu paquete

Para agregar el archivo jar a su proyecto en Eclipse, haga lo siguiente:

  1. Haga clic derecho en su proyecto, haga clic en Build Path> Configure Build Path
  2. Pestaña Ir a bibliotecas> Agregar archivos JAR externos
  3. Ubique el archivo JAR y agregue

3
2018-04-12 19:56



Esta es la cadena JSON que queremos decodificar:

{ 
   "stats": { 
       "sdr": "aa:bb:cc:dd:ee:ff", 
       "rcv": "aa:bb:cc:dd:ee:ff", 
       "time": "UTC in millis", 
       "type": 1, 
       "subt": 1, 
       "argv": [
          {"1": 2}, 
          {"2": 3}
       ]}
}

Guardo esta cadena bajo el nombre de variable "sJSON" Ahora, así es como decodificarlo :)

// Creating a JSONObject from a String 
JSONObject nodeRoot  = new JSONObject(sJSON); 

// Creating a sub-JSONObject from another JSONObject
JSONObject nodeStats = nodeRoot.getJSONObject("stats");

// Getting the value of a attribute in a JSONObject
String sSDR = nodeStats.getString("sdr");

2
2017-12-10 10:09