Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting a json array to json object in android using gson?

I am passing a json array from activity A to activity B.Then I am using the GSON library to insert a value into the array.This is my current code.

public void gsonResponse(String json) {
    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONArray jsonArray = jsonObject.getJSONArray("result");
        for (int i = 0; i < jsonArray.length(); i++) {
            LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
            JSONObject innerJosonObject = new JSONObject(jsonArray.getString(i));

            // you need to put all values from jsonObject to map for managing the order..

            linkedHashMap.put("doc_no", textViewInvNo.getText().toString());
            linkedHashMap.put("itembarcode", innerJosonObject.getString("itembarcode"));
            linkedHashMap.put("net_wt", innerJosonObject.getString("net_wt"));
            linkedHashMap.put("gross_wt", innerJosonObject.getString("gross_wt"));
            linkedHashMap.put("stone_wt", innerJosonObject.getString("stone_wt"));
            linkedHashMap.put("stone_amt", innerJosonObject.getString("stone_amt"));
            linkedHashMap.put("rate", innerJosonObject.getString("rate"));
            linkedHashMap.put("making", innerJosonObject.getString("making"));
            linkedHashMap.put("qty", innerJosonObject.getString("qty"));
            linkedHashMap.put("net_rate", innerJosonObject.getString("net_rate"));
            linkedHashMap.put("item_total", innerJosonObject.getString("item_total"));
            linkedHashMap.put("sum_total", innerJosonObject.getString("sum_total"));
            Gson gson = new Gson();
            // convert linkedHashMap to json string and it will keep the insertion order..
            String string = gson.toJson(linkedHashMap, LinkedHashMap.class);
            jsonArray.put(i, string);
        }
        jsonObject.put("result", jsonArray);
        String jsonResp = jsonObject.toString();
        jsonFormattedString = jsonResp.replaceAll("\\\\","");
        Log.d("NEW JSON", jsonFormattedString);

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

The output for this is :-

{"result":["{"doc_no":"ES101","itembarcode":"BRMS","net_wt":"10","gross_wt":"1","stone_wt":"0","stone_amt":"0","rate":"32000","making":"100","qty":"1","net_rate":"32100.0","item_total":"32100.0","sum_total":"64600.0"}",
 "{"doc_no":"ES101","itembarcode":"MSAA0015","net_wt":"10","gross_wt":"11","stone_wt":"100000","stone_amt":"1","rate":"32000","making":"500","qty":"1","net_rate":"32500.0","item_total":"32500.0","sum_total":"64600.0"}"]}

But my desired output should be something like :-

[{"doc_no":"IN1001","itembarcode":"BRMS123456\nFLT22K","net_wt":"10","gross_wt":"10","stone_amt":"0","rate":"29000","making":"999","qty":"1","net_rate":"29999.0","item_total":"29999.0","sum_total":"30299.0","stone_wt":"0"},
 {"doc_no":"IN1001","itembarcode":"BRMS\nGA24K","net_wt":"10","gross_wt":"1","stone_amt":"0","rate":"32000","making":"100","qty":"1","net_rate":"","item_total":"","sum_total":"30299.0","stone_wt":""}]

How can I achieve it? Any suggestion or help is appreciated.Thank You.

like image 474
AndroidNewBee Avatar asked Apr 15 '16 07:04

AndroidNewBee


1 Answers

Actually you don't need the following line:

jsonObject.put("result", jsonArray);

Just use the existing jsonArray like the following:

String jsonResp = jsonArray.toString();

One other note. you will get extra " " in your response and that is because of jsonArray.put(i, string); statement in the for loop which inserts extra " ". you can simply use the following to fix that:

    jsonResp = jsonResp.replaceAll("\"[{]", "{");
    jsonResp = jsonResp.replaceAll("[}]\"", "}");
like image 109
Pooya Avatar answered Oct 18 '22 11:10

Pooya