jeet.chanchawat
jeet.chanchawat

Reputation: 2575

How to convert String to JsonArray?

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)

Upvotes: 0

Views: 3131

Answers (2)

krishnakumarp
krishnakumarp

Reputation: 9295

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.

Upvotes: 2

Yair Zaslavsky
Yair Zaslavsky

Reputation: 4137

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.

Upvotes: 0

Related Questions