I am trying to manipulate a JsonArray to look like another JsonArray. I implemented some string methods to the existing JsonArray. and now I want to put it back in another JsonArray.
CODE
Log.d("defaultArrayShuffled", defaultArray.toString());
String temp = defaultArray.toString();
String temp1= temp.replaceAll("_white_", "_");
Log.d("temp1", temp1);
JSONObject temp2 = new JSONObject();
temp2.put("arr", temp1);
Log.d("temp2", temp2.toString());
replacingArray = temp2.getJSONArray("arr");
LogCAT
07-03 19:16:37.310: D/defaultArrayShuffled(8863): ["findhidden\/o_white_64.png","findhidden\/x_white_64.png","findhidden\/f_white_64.png","findhidden\/b_white_64.png","findhidden\/a_white_64.png","findhidden\/g_white_64.png","findhidden\/p_white_64.png","findhidden\/u_white_64.png","findhidden\/n_white_64.png","findhidden\/j_white_64.png","findhidden\/y_white_64.png","findhidden\/q_white_64.png","findhidden\/l_white_64.png","findhidden\/t_white_64.png","findhidden\/h_white_64.png","findhidden\/v_white_64.png","findhidden\/r_white_64.png","findhidden\/k_white_64.png","findhidden\/m_white_64.png","findhidden\/c_white_64.png","findhidden\/z_white_64.png","findhidden\/s_white_64.png","findhidden\/w_white_64.png","findhidden\/d_white_64.png","findhidden\/i_white_64.png","findhidden\/e_white_64.png"]
07-03 19:16:37.310: D/temp1(8863): ["findhidden\/o_64.png","findhidden\/x_64.png","findhidden\/f_64.png","findhidden\/b_64.png","findhidden\/a_64.png","findhidden\/g_64.png","findhidden\/p_64.png","findhidden\/u_64.png","findhidden\/n_64.png","findhidden\/j_64.png","findhidden\/y_64.png","findhidden\/q_64.png","findhidden\/l_64.png","findhidden\/t_64.png","findhidden\/h_64.png","findhidden\/v_64.png","findhidden\/r_64.png","findhidden\/k_64.png","findhidden\/m_64.png","findhidden\/c_64.png","findhidden\/z_64.png","findhidden\/s_64.png","findhidden\/w_64.png","findhidden\/d_64.png","findhidden\/i_64.png","findhidden\/e_64.png"]
07-03 19:16:37.310: D/temp2(8863): {"arr":"[\"findhidden\\\/o_64.png\",\"findhidden\\\/x_64.png\",\"findhidden\\\/f_64.png\",\"findhidden\\\/b_64.png\",\"findhidden\\\/a_64.png\",\"findhidden\\\/g_64.png\",\"findhidden\\\/p_64.png\",\"findhidden\\\/u_64.png\",\"findhidden\\\/n_64.png\",\"findhidden\\\/j_64.png\",\"findhidden\\\/y_64.png\",\"findhidden\\\/q_64.png\",\"findhidden\\\/l_64.png\",\"findhidden\\\/t_64.png\",\"findhidden\\\/h_64.png\",\"findhidden\\\/v_64.png\",\"findhidden\\\/r_64.png\",\"findhidden\\\/k_64.png\",\"findhidden\\\/m_64.png\",\"findhidden\\\/c_64.png\",\"findhidden\\\/z_64.png\",\"findhidden\\\/s_64.png\",\"findhidden\\\/w_64.png\",\"findhidden\\\/d_64.png\",\"findhidden\\\/i_64.png\",\"findhidden\\\/e_64.png\"]"}
MORE LOGCAT
07-03 19:16:37.320: W/System.err(8863): at org.json.JSON.typeMismatch(JSON.java:96)
-
I will be able to reply after 12 hrs... offline for now... thanksjeet.chanchawat– jeet.chanchawat2012年07月03日 14:03:23 +00:00Commented Jul 3, 2012 at 14:03
-
1And your question is...?haylem– haylem2012年07月03日 14:18:44 +00:00Commented Jul 3, 2012 at 14:18
-
How to convert String to JsonArray ?jeet.chanchawat– jeet.chanchawat2012年07月04日 05:45:07 +00:00Commented Jul 4, 2012 at 5:45
2 Answers 2
From the log output of temp2, the json type of arr is String. So you would get typeMismatch if you try to get JSONArray out of it.
See if the below code works for you. JSONObject's constructor can take a JSON-encoded string containing an object. So we use it to create temp2.
Log.d("defaultArrayShuffled", defaultArray.toString());
String temp = defaultArray.toString();
String temp1= temp.replaceAll("_white_", "_");
Log.d("temp1", temp1);
JSONObject temp2 = new JSONObject("{ \"arr\" : " + temp1 + "}");
//temp2.put("arr", temp1);
Log.d("temp2", temp2.toString());
replacingArray = temp2.getJSONArray("arr");
Hope it helps.
1 Comment
Several ideas -
A. I find Jackson to be a better Json library. Consider using it. It provides better error messages
B. I wrote the following code , similar to what you did using an infra we did at www.ovirt.org for Json serializing and Deserializing:
String[] arr = { "aaa_white_.png", "bbb_white_.png", "ccc_white_.png", "ddd.png" };
JsonObjectSerializer serialezer = new JsonObjectSerializer();
String payload = serialezer.serialize(arr);
String newPayload = payload.replaceAll("_white_", "_");
JsonObjectDeserializer der = new JsonObjectDeserializer();
String[] res = (String[]) der.deserialize(newPayload, String[].class);
System.out.println(payload);
System.out.println(res);
for (String str : res) {
System.out.println(str);
}
You can git clone our code, and you should look at ovirt-engine/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json
To see what we did there.