2016-04-15 14 views
5

Sto passando un array JSON dall'attività A all'attività B. Quindi sto utilizzando la libreria GSON per inserire un valore nell'array. Questo è il mio codice corrente.Convertire un array JSON in un oggetto json in Android usando 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(); 
    } 
} 

L'uscita per questo è: -

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

Ma il mio output desiderato dovrebbe essere qualcosa di simile: -

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

Come posso raggiungerlo? Qualsiasi suggerimento o aiuto è apprezzato. Grazie.

risposta

4

In realtà non è necessario la seguente riga:

jsonObject.put("result", jsonArray); 

Basta usare il jsonArray esistente come il seguente:

String jsonResp = jsonArray.toString(); 

Un'altra nota. riceverai extra "" nella tua risposta e ciò è dovuto a jsonArray.put (i, string); dichiarazione nel ciclo for che inserisce extra "". è sufficiente utilizzare quanto segue per risolvere il problema:

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

Hey questo è facile e sembra funzionare l'unico problema è che ottengo quotes.How in più posso sbarazzati di loro. [ "{" Doc_no ":" IN1002" , "itembarcode": "BRMS", "net_wt": "10", "gross_wt": "1", "stone_wt": "0", "stone_amt": "0" , "rate": "32000", "lavorazione": "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", "fare": "500", "qty": "1", "net_rate": "32500,0", "ITEM_TOTAL": "32500,0", "sum_total": "64600,0"} "] –

+0

ma la dimensione dell'array continua a cambiare. Non sarà sempre 2. –

+0

fornisce questo output ["" doc_no ":" IN1002 "," itembarcode ":" BRMS "," net_wt ":" 10 "," gross_wt ":" 1 "," stone_wt ":" 0 "," stone_amt " : "0", "rate": "32000", "lavorazione": "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", "fare": "500", "qty": "1", "net_rate": "32500,0", "ITEM_TOTAL": "32500,0", "sum_total": "64600,0" "] –

0

Fai un modello come questo 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; 
     } 

    } 

e analizzare il JSON da GSON ->

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

Suggerisco di creare la classe del modello per l'implementazione GSON.

Dai un'occhiata a questa soluzione.

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

}