5

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.

3 Answers 3

5

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("[}]\"", "}");
Sign up to request clarification or add additional context in comments.

6 Comments

Hey this is easy and seems to work the only problem is I get extra quotes.How can I get rid of them. ["{"doc_no":"IN1002","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":"IN1002","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 the array size keeps changing.It wont be 2 always.
it gives this output [""doc_no":"IN1002","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":"IN1002","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""]
it is actually because of jsonArray.put(i, string); which insert an extra "" in the array but wait I figure something for you
I am thinking of replacing all "{ and }" what do you think?
|
0

Make a Model like This DocInfoModel.java ->

public class DocInfoModel {

        @SerializedName("doc_no")
        @Expose
        private String docNo;
        @SerializedName("itembarcode")
        @Expose
        private String itembarcode;
        @SerializedName("net_wt")
        @Expose
        private String netWt;
        @SerializedName("gross_wt")
        @Expose
        private String grossWt;
        @SerializedName("stone_amt")
        @Expose
        private String stoneAmt;
        @SerializedName("rate")
        @Expose
        private String rate;
        @SerializedName("making")
        @Expose
        private String making;
        @SerializedName("qty")
        @Expose
        private String qty;
        @SerializedName("net_rate")
        @Expose
        private String netRate;
        @SerializedName("item_total")
        @Expose
        private String itemTotal;
        @SerializedName("sum_total")
        @Expose
        private String sumTotal;
        @SerializedName("stone_wt")
        @Expose
        private String stoneWt;

        /**
         *
         * @return
         * The docNo
         */
        public String getDocNo() {
            return docNo;
        }

        /**
         *
         * @param docNo
         * The doc_no
         */
        public void setDocNo(String docNo) {
            this.docNo = docNo;
        }

        /**
         *
         * @return
         * The itembarcode
         */
        public String getItembarcode() {
            return itembarcode;
        }

        /**
         *
         * @param itembarcode
         * The itembarcode
         */
        public void setItembarcode(String itembarcode) {
            this.itembarcode = itembarcode;
        }

        /**
         *
         * @return
         * The netWt
         */
        public String getNetWt() {
            return netWt;
        }

        /**
         *
         * @param netWt
         * The net_wt
         */
        public void setNetWt(String netWt) {
            this.netWt = netWt;
        }

        /**
         *
         * @return
         * The grossWt
         */
        public String getGrossWt() {
            return grossWt;
        }

        /**
         *
         * @param grossWt
         * The gross_wt
         */
        public void setGrossWt(String grossWt) {
            this.grossWt = grossWt;
        }

        /**
         *
         * @return
         * The stoneAmt
         */
        public String getStoneAmt() {
            return stoneAmt;
        }

        /**
         *
         * @param stoneAmt
         * The stone_amt
         */
        public void setStoneAmt(String stoneAmt) {
            this.stoneAmt = stoneAmt;
        }

        /**
         *
         * @return
         * The rate
         */
        public String getRate() {
            return rate;
        }

        /**
         *
         * @param rate
         * The rate
         */
        public void setRate(String rate) {
            this.rate = rate;
        }

        /**
         *
         * @return
         * The making
         */
        public String getMaking() {
            return making;
        }

        /**
         *
         * @param making
         * The making
         */
        public void setMaking(String making) {
            this.making = making;
        }

        /**
         *
         * @return
         * The qty
         */
        public String getQty() {
            return qty;
        }

        /**
         *
         * @param qty
         * The qty
         */
        public void setQty(String qty) {
            this.qty = qty;
        }

        /**
         *
         * @return
         * The netRate
         */
        public String getNetRate() {
            return netRate;
        }

        /**
         *
         * @param netRate
         * The net_rate
         */
        public void setNetRate(String netRate) {
            this.netRate = netRate;
        }

        /**
         *
         * @return
         * The itemTotal
         */
        public String getItemTotal() {
            return itemTotal;
        }

        /**
         *
         * @param itemTotal
         * The item_total
         */
        public void setItemTotal(String itemTotal) {
            this.itemTotal = itemTotal;
        }

        /**
         *
         * @return
         * The sumTotal
         */
        public String getSumTotal() {
            return sumTotal;
        }

        /**
         *
         * @param sumTotal
         * The sum_total
         */
        public void setSumTotal(String sumTotal) {
            this.sumTotal = sumTotal;
        }

        /**
         *
         * @return
         * The stoneWt
         */
        public String getStoneWt() {
            return stoneWt;
        }

        /**
         *
         * @param stoneWt
         * The stone_wt
         */
        public void setStoneWt(String stoneWt) {
            this.stoneWt = stoneWt;
        }

    }

And Parse the json by GSON ->

Gson gson = new Gson();
DocInfoModel[] docModel = gson.fromJson(RESPONSE_STRING,DocInfoModel[].class);

Comments

0

I would suggest to create Model class for your GSON implementation.

Check out this solution.

private void testDoc()
    {
        String json = "{\"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\"}]}";
        Gson gson = new Gson();
        DocInfo docInfo = gson.fromJson(json, DocInfo.class);

        System.out.println("Before ***********************");
        System.out.println(gson.toJson(docInfo));

        for(Result result : docInfo.getResult())
        {
            result.setDocNo("New Doc No");
        }

        System.out.println("After ***********************");
        System.out.println(gson.toJson(docInfo));
    }

DocInfo.java

import java.util.ArrayList;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class DocInfo {

    @SerializedName("result")
    @Expose
    private List<Result> result = new ArrayList<Result>();

    /**
     *
     * @return
     * The result
     */
    public List<Result> getResult() {
        return result;
    }

    /**
     *
     * @param result
     * The result
     */
    public void setResult(List<Result> result) {
        this.result = result;
    }

}

Result.java

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Result {

    @SerializedName("doc_no")
    @Expose
    private String docNo;
    @SerializedName("itembarcode")
    @Expose
    private String itembarcode;
    @SerializedName("net_wt")
    @Expose
    private String netWt;
    @SerializedName("gross_wt")
    @Expose
    private String grossWt;
    @SerializedName("stone_wt")
    @Expose
    private String stoneWt;
    @SerializedName("stone_amt")
    @Expose
    private String stoneAmt;
    @SerializedName("rate")
    @Expose
    private String rate;
    @SerializedName("making")
    @Expose
    private String making;
    @SerializedName("qty")
    @Expose
    private String qty;
    @SerializedName("net_rate")
    @Expose
    private String netRate;
    @SerializedName("item_total")
    @Expose
    private String itemTotal;
    @SerializedName("sum_total")
    @Expose
    private String sumTotal;

    /**
     *
     * @return
     * The docNo
     */
    public String getDocNo() {
        return docNo;
    }

    /**
     *
     * @param docNo
     * The doc_no
     */
    public void setDocNo(String docNo) {
        this.docNo = docNo;
    }

    /**
     *
     * @return
     * The itembarcode
     */
    public String getItembarcode() {
        return itembarcode;
    }

    /**
     *
     * @param itembarcode
     * The itembarcode
     */
    public void setItembarcode(String itembarcode) {
        this.itembarcode = itembarcode;
    }

    /**
     *
     * @return
     * The netWt
     */
    public String getNetWt() {
        return netWt;
    }

    /**
     *
     * @param netWt
     * The net_wt
     */
    public void setNetWt(String netWt) {
        this.netWt = netWt;
    }

    /**
     *
     * @return
     * The grossWt
     */
    public String getGrossWt() {
        return grossWt;
    }

    /**
     *
     * @param grossWt
     * The gross_wt
     */
    public void setGrossWt(String grossWt) {
        this.grossWt = grossWt;
    }

    /**
     *
     * @return
     * The stoneWt
     */
    public String getStoneWt() {
        return stoneWt;
    }

    /**
     *
     * @param stoneWt
     * The stone_wt
     */
    public void setStoneWt(String stoneWt) {
        this.stoneWt = stoneWt;
    }

    /**
     *
     * @return
     * The stoneAmt
     */
    public String getStoneAmt() {
        return stoneAmt;
    }

    /**
     *
     * @param stoneAmt
     * The stone_amt
     */
    public void setStoneAmt(String stoneAmt) {
        this.stoneAmt = stoneAmt;
    }

    /**
     *
     * @return
     * The rate
     */
    public String getRate() {
        return rate;
    }

    /**
     *
     * @param rate
     * The rate
     */
    public void setRate(String rate) {
        this.rate = rate;
    }

    /**
     *
     * @return
     * The making
     */
    public String getMaking() {
        return making;
    }

    /**
     *
     * @param making
     * The making
     */
    public void setMaking(String making) {
        this.making = making;
    }

    /**
     *
     * @return
     * The qty
     */
    public String getQty() {
        return qty;
    }

    /**
     *
     * @param qty
     * The qty
     */
    public void setQty(String qty) {
        this.qty = qty;
    }

    /**
     *
     * @return
     * The netRate
     */
    public String getNetRate() {
        return netRate;
    }

    /**
     *
     * @param netRate
     * The net_rate
     */
    public void setNetRate(String netRate) {
        this.netRate = netRate;
    }

    /**
     *
     * @return
     * The itemTotal
     */
    public String getItemTotal() {
        return itemTotal;
    }

    /**
     *
     * @param itemTotal
     * The item_total
     */
    public void setItemTotal(String itemTotal) {
        this.itemTotal = itemTotal;
    }

    /**
     *
     * @return
     * The sumTotal
     */
    public String getSumTotal() {
        return sumTotal;
    }

    /**
     *
     * @param sumTotal
     * The sum_total
     */
    public void setSumTotal(String sumTotal) {
        this.sumTotal = sumTotal;
    }

}

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.