Подтвердить что ты не робот

Декодирование строки JSON в Java

Я новичок в использовании json-простой библиотеки в Java, и я прошел через encoding и decoding. Дублирование примеров кодирования было прекрасным, но я не смог заставить декодирование работать со смешанным типом JSON.

Одна из моих проблем заключается в том, что в библиотеке слишком много классов, которые не задокументированы должным образом и для которых у меня нет источника (чтобы иметь возможность читать и понимать их цель). Следовательно, я изо всех сил пытаюсь понять, как использовать многие из этих классов.

После прочтения этого примера:

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

из json-simple официального учебника по расшифровке, я попытался декодировать этот 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}
    ]
}
}

Я пишу следующий код для декодирования:

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

Но это не сработает. Infact Мне тоже не удалось получить немодифицированный пример, и оригинальные авторы не объяснили свой код.

Каков самый простой способ декодирования этого JSON, как показано?

4b9b3361

Ответ 1

Это лучший и простой код:

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

Ниже приведено описание библиотеки json файлов. И это не те же библиотеки, что и размещенные здесь, то есть отправленные вами. То, что вы разместили, было простая библиотека json Я использовал эту библиотеку.

Вы можете загрузить zip. А затем создайте package в своем проекте с org.json как имя. и вставьте все загруженные коды там и получайте удовольствие.

Я считаю, что это лучшее и самое простое декодирование JSON.

Ответ 2

Ну, ваш jsonString ошибочен.

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

используйте этот jsonString, и если вы используете те же JSONParser и ContainerFactory в примере, вы увидите, что он будет закодирован/декодирован.

Кроме того, если вы хотите напечатать свою строку после stat здесь:

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

А о json-библиотеках их много. Лучше вы проверите это.

Ответ 3

Вместо того, чтобы загружать отдельные Java файлы, как было предложено Veer, вы можете просто добавить этот JAR файл в свой пакет.

Чтобы добавить файл jar в проект в Eclipse, выполните следующие действия:

  • Щелкните правой кнопкой мыши на своем проекте и выберите "Путь сборки" > "Настроить путь сборки".
  • вкладка Перейти к библиотекам > Добавить внешние JAR
  • Найдите файл JAR и добавьте

Ответ 4

Это строка JSON, которую мы хотим декодировать:

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

Я сохраняю эту строку под именем переменной "sJSON" Итак, вот как его декодировать:)

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