【问题标题】:how to deserialize json to a dictionary or keyvaluepair?如何将 json 反序列化为字典或键值对?
【发布时间】:2010-12-27 14:07:22
【问题描述】:

我必须像这样反序列化一个 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;

【问题讨论】:

    标签: java json network-programming


    【解决方案1】:

    你所拥有的不是 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 site

    【讨论】:

      【解决方案2】:

      试试Jackson 库。

      【讨论】:

      • 我正在使用 json.org -- 在项目的这个阶段更改库不是一个选项。但它看起来是一个很棒的图书馆
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多