使用gson将json数组转换为android中的json对象?

我将一个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 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":""}] 

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

实际上你不需要以下行:

 jsonObject.put("result", jsonArray); 

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

 String jsonResp = jsonArray.toString(); 

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

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

制作一个像这个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); 

我建议为你的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 = new ArrayList(); /** * * @return * The result */ public List getResult() { return result; } /** * * @param result * The result */ public void setResult(List 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; } }