0

In Java, I've these key/value pairs passed by post (for example):

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

I've to create the following 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"}}}]

How could I do?

I don't succeed in parsing the keys, grouping the elements which do part of the same JSONObject.

3
  • That's nice. It looks like a case for recursion. What have you tried? Commented Jun 9, 2012 at 20:32
  • @pst: Actually I was thinking something recursive, but I have not tried. I think I've to parse the keys, but what "structure" I have to create to use org.json to build the json? Commented Jun 9, 2012 at 20:46
  • Just walk it into the appropriate "JSONObjects" while recusing; the org.json version is more than sufficient for this. It looks like "is numeric key" or "values" they create a nested JSONObject (recurse) else, just map to property in current level. Commented Jun 9, 2012 at 20:55

3 Answers 3

1

You can use the Gson library for this. It does not support serializaton of nested maps (I assume your output represents a nested map). You can write a custom serializer/deserializer or create your own serialization method following the instructions in this thread

Sign up to request clarification or add additional context in comments.

Comments

1

You can do something like this:

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

Check here for more details

2 Comments

Yes, so how to expand this to work over the nested structure?
As I haven't a JSONObject for each element passed by post, and as the keys are strings, I think I have to parse the keys in some way and build the JSONArray.
0

I resolved by parsing the keys and by building the JSONObjects with the use of two temporary hashtables.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.