2012-09-15 230 views
1

刚刚开始,所以任何促进赞赏。 有一个对象它序列化到该起始段:json反序列化

[{ “boo00”:真 “LINEITEM”:[{ “bool00”:真, “显示”:假 “extra00”: “的objectType” “状态”: “”, “值”: “RECORDTYPE:A”}, { “bool00”:真, “显示”:假 “extra00”: “0”, “状态”: “”,“值“:” UPC:1 “},{...},{...}],” ROWID “:0”,str00 “:” 隐藏的“},

该对象具有四个要素:boo00 (布尔值),lineIem(ArrayList),rowID(int),str00(String)

我有这个细分市场,我想了解如何构建回我的对象​​

String flatten = lines.toString(); 
JSONObject outer = JSONObject.fromObject(flatten); 
Iterator itr04 = null; 
for(itr04 = outer.entrySet().iterator(); itr04.hasNext();){ 
    Map.Entry entry = (Map.Entry) itr04.next(); 
    String key = (String)entry.getKey(); 
    System.out.println("key= "+key); 
} 

我得到以下异常:

“net.sf.json.JSONException:一个JSONObject文本必须在[]的第1个字符处以'{'开始“

在这一点上对我来说没什么意义,因为这正是它的起始方式。

回答

3

你的JSON文本开始一个括号:[,而不是一个大括号:{。 JSON字符串表示对象的数组

outer应该是一个JSONArray

+0

谢谢。如果我能跟进到这里去。如何获得下一个“块”? JSONArray.size()显示了我的对象类型的三个元素。现在,因为我知道结构如何递归地解析每个结构?在这种情况下,我有一个对象包含一些基元和一个ArrayList,那么如何将它作为一个单独的块并解析并迭代列表? –

+0

@cp - 如果你知道你有一个JSONArray,你可以迭代它并提取每个元素。如果你知道每个元素都是JSONObject,那么你可以投射到那个。如果你不确定,在投射之前使用'instanceof'来测试数组元素的类型。 –

0

由于Java的JSON的东西是有点死脑筋的,有一两件事你可以做的是串联“[”和“]”到前端和末端的字符串。然后,您可以始终使用JSONArray来读取字符串,然后对每个数组元素执行instanceof以查找您拥有的内容。