2013-05-15 3 views
13

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

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

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

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 official decoding tutorial, я попытался расшифровать этот 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, как показано на рисунке?

+0

Можем ли мы видеть ваш код для декодирования стата? –

+0

Вы проверили с примером 5 (Stoppable SAX-подобный обработчик контента) в [JSON официальном учебнике по расшифровке] (https://code.google.com/p/json-simple/wiki/DecodingExamples) Как я вижу, код предназначен для одного словаря (Карта)/Массив. Но вы пытаетесь использовать json с картами на карте (несколько карт). Если я ошибаюсь, верьте мне. – ram2013

+0

@ ram2013: ya .. мне нужно, чтобы декодировать карты на картах ... и я думаю, что это один из них. как будто я получаю значение для «stat», я могу использовать его для дальнейшего декодирования JSON. –

ответ

17

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

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

library definition of the json files are given here. И это не те же библиотеки, что и опубликованные here, т. Е. Отправленные вами. То, что вы разместили, было simple json library Я использовал this library.

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

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

+0

Как добавить escape '\' в '' 'в' JSON'? Я не хочу делать 'String.replace()' – Identity1

+0

Я все время получаю этот вывод " Текст JSONObject должен начинаться с '{' в 1 [символ 2 строка 1] " У моего содержимого JSON нет ничего перед вторым" {" – Chandough

+0

Пожалуйста, обновите ссылку. Его мертвый – muaaz

4

Ну, ваш 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, есть много из них. Лучше проверите this.

+0

link is dead ... –

2

Это 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"); 
+1

Письмо 'отсутствует t "stat", должен быть JSONObject nodeStats = nodeRoot.getJSONObject ("stats"); правильно ? –

3

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

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

  1. правой кнопкой мыши на вашем проекте, выберите Build Path> Configure Build Path
  2. вкладку
  3. Goto Libraries> Добавить Внешние JARs
  4. Найдите файл JAR и добавьте
Смежные вопросы