【问题标题】:Converting a json array to json object in android using gson?使用gson将json数组转换为android中的json对象?
【发布时间】:2016-08-07 01:45:29
【问题描述】:

我将一个 json 数组从活动 A 传递到活动 B。然后我使用 GSON 库向数组中插入一个值。这是我当前的代码。

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

这个的输出是:-

{"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"}"]}

但我想要的输出应该是这样的:-

[{"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":""}]

我怎样才能实现它?任何建议或帮助表示赞赏。谢谢。

【问题讨论】:

    标签: java android arrays json gson


    【解决方案1】:

    其实你不需要下面这行:

    jsonObject.put("result", jsonArray);
    

    只需使用现有的 jsonArray,如下所示:

    String jsonResp = jsonArray.toString();
    

    另一个注释。你会在你的回复中得到额外的“”,这是因为 jsonArray.put(i, string); for 循环中插入额外“”的语句。你可以简单地使用以下方法来解决这个问题:

        jsonResp = jsonResp.replaceAll("\"[{]", "{");
        jsonResp = jsonResp.replaceAll("[}]\"", "}");
    

    【讨论】:

    • 嘿,这很容易而且似​​乎有效,唯一的问题是我得到了额外的引号。我怎样才能摆脱它们。 ["{"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"}" ]
    • 但是数组大小一直在变化,不会一直是2。
    • 它给出了这个输出 [""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""]
    • 其实是因为jsonArray.put(i, string);在数组中插入一个额外的“”,但等待我为你想出一些东西
    • 我正在考虑替换所有“{ 和 }”,你怎么看?
    【解决方案2】:

    制作这样的模型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;
            }
    
        }
    

    并通过 GSON 解析 json ->

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

    【讨论】:

      【解决方案3】:

      我建议为您的 GSON 实现创建 Model 类。

      查看此解决方案。

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

      【讨论】:

        猜你喜欢
        • 2012-02-29
        • 1970-01-01
        • 2021-06-18
        • 2016-05-07
        • 2023-03-08
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多