Как десериализовать JSON в словарь или пару ключей? - PullRequest
2 голосов
/ 27 декабря 2010

Мне нужно десериализовать JSON-объект, подобный этому

[{"Key":{"id":0, "Name":"an Object"}, "Value":true},
{"Key":{"id":0, "Name":"an Object"}, "Value":true}]

Я знаю, как десериализовать массивы и отдельные объекты или переменные. но я в голубом о словарях.

Я использую следующее для чтения массива

NetworkEvent n = (NetworkEvent) evt;
byte[] data = (byte[]) n.getMetaData();

AnObject[] anObject= null;
 try {
     JSONArray json = new JSONArray(new String(data, "UTF-8"));
     anObject= AnObject.getAnObjects(json);
 } catch (Exception ex) {
     ex.printStackTrace();
 }    

Окончательное кодовое решение:

        Object[] objects= new Object[json.length()];
        for (int i = 0; i < json.length(); ++i) {

            Key key= null;
            Value value = null;
            try {
                JSONObject keyValuePair = json.getJSONObject(i);
                key= Key.getKey(keyValuePair.getJSONObject("Key"));
                value= keyValuePair.getBoolean("Value");
            } catch (JSONException ex) {
                ex.printStackTrace();
            }

          Object object= new object();
          object.setKey(key);
          object.setValue(value);

          Objects[i] = object;
        }
        return objects;

Ответы [ 2 ]

5 голосов
/ 27 декабря 2010

То, что у вас есть, не является объектом JSON. Это массив объектов JSON, и поэтому ваш текущий код должен работать.

Я думаю, что ваша "проблема" в том, что вы используете неправильную терминологию.

Это атрибут или пара имя / значение:

"id":0

Это объект:

{"id":0, "Name":"an Object"}

Это также объект:

{"Key":{"id":0, "Name":"an Object"}, "Value":true}

Это массив (объектов)

[{"Key":{"id":0, "Name":"an Object"}, "Value":true},
 {"Key":{"id":0, "Name":"an Object"}, "Value":true}]

Подробнее см. На сайте json.org .

0 голосов
/ 27 декабря 2010

Попробуйте библиотеку Джексона .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...