2012-06-09 27 views
0

在Java中,我已经通过邮局(例如)通过了这些键/值对:从给定的映射到一个JSON字符串(或者的JSONObject)

form_id=undefined 

frmb[0][cssClass]=input_text 

frmb[0][required]=checked 

frmb[0][values]=First Name 

frmb[1][cssClass]=input_text 

frmb[1][required]=checked 

frmb[1][values]=Last Name 

frmb[2][cssClass]=textarea 

frmb[2][required]=undefined 

frmb[2][values]=Bio 

frmb[3][cssClass]=checkbox 

frmb[3][required]=undefined 

frmb[3][title]=What's on your pizza? 

frmb[3][values][2][baseline]=undefined 

frmb[3][values][2][value]=Extra Cheese 

frmb[3][values][3][baselise]=undefined 

frmb[3][values][3][value]=Pepperoni 

frmb[3][values][4][baseline]=undefined 

frmb[3][values][4][value]=Beef 

frmb[4][cssClass]=radio 

frmb[4][required]=undefined 

frmb[4][title]=Do you like pizza? 

frmb[4][values][2][baseline]=checked 

frmb[4][values][2][value]=Yes 

frmb[4][values][3][baseline]=undefined 

frmb[4][values][3][value]=No 

frmb[5][cssClass]=select 

frmb[5][multiple]=checked 

frmb[5][required]=checked 

frmb[5][title]=Select a pizza type: 

frmb[5][values][2][baseline]=checked 

frmb[5][values][2][value]=Margherita 

frmb[5][values][3][baseline]=undefined 

frmb[5][values][3][value]=Napoli 

frmb[5][values][4][baseline]=undefined 

frmb[5][values][4][value]=Marinara 

我已经创建以下JSON:

[{"cssClass":"input_text","required":"checked","values":"First Name"},{"cssClass":"input_text","required":"checked","values":"Last Name"},{"cssClass":"textarea","required":"undefined","values":"Bio"},{"cssClass":"checkbox","required":"undefined","title":"What's on your pizza?","values":{"2":{"value":"Extra Cheese","baseline":"undefined"},"3":{"value":"Pepperoni","baseline":"undefined"},"4":{"value":"Beef","baseline":"undefined"}}},{"cssClass":"radio","required":"undefined","title":"Do you like pizza?","values":{"2":{"value":"Yes","baseline":"checked"},"3":{"value":"No","baseline":"undefined"}}},{"cssClass":"select","required":"checked","multiple":"checked","title":"Select a pizza type:","values":{"2":{"value":"Margherita","baseline":"checked"},"3":{"value":"Napoli","baseline":"undefined"},"4":{"value":"Marinara","baseline":"undefined"}}}] 

我该怎么办?

我没有成功在解析键,分组做相同的JSONObject的一部分的元素。

+0

很好。它看起来像递归的情况。你有什么尝试? – 2012-06-09 20:32:25

+0

@pst:其实我想的是递归的东西,但我还没有尝试过。我想我必须解析键,但是我必须创建什么“结构”来使用org.json来构建json? – Sefran2

+0

只需将其放入相应的“JSONObjects”中即可; org.json版本已经足够了。它看起来像“是数字键”*或*“值”他们创建一个嵌套的JSONObject(递归)其他,只是映射到当前级别的属性。 – 2012-06-09 20:55:35

回答

0

我通过解析解析键和通过使用两个临时哈希表构建JSONObjects。

1

您可以使用Gson这个库。它不支持嵌套地图的序列化(我假设你的输出表示一个嵌套地图)。你可以写一个自定义的串行器/解串器或创建以下的说明自己的序列化方法this thread

1

你可以做这样的事情:

JSONArray jsonItems = new JSONArray(); 

for (int i = 0; i < frmb.size(); i++) { 

JSONObject json = new JSONObject(); 
json.put("cssClass", frmb[i][cssClass]); 
json.put("required",frmb[i][required]); 
//put json object to json array 
jsonItems.put(json); 
} 

检查here更多细节

+0

是的,那么如何扩展这个嵌套结构呢? – 2012-06-09 21:26:55

+0

由于我没有一个JSONObject的每个元素通过后,并作为键是字符串,我想我必须以某种方式解析键和构建JSONArray。 – Sefran2

相关问题