【问题标题】:Not able to convert data in JSON format android无法转换JSON格式的数据android
【发布时间】:2019-05-09 04:44:19
【问题描述】:

我有一些数据想要转换成 json 对象。我想要的数据是这样的

{"week":"Apr 22, 2019","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}

工作日为数组类型,其他为json对象类型。我已经做了一些代码来转换它,但我可以像

一样转换它
{"weekdata":"[\"2019-04-01##5:0##5:0\",\"2019-04-02##5:0##5:0\"]","package_id":"44","week":"Apr 01, 2019"}

代码:

创建weekdata数组的代码:

  String firstDay = etDate1.getText().toString() + "##" + etStartTime1.getText().toString() + "##" + etEndTime1.getText().toString();
  String secondDay = etDate2.getText().toString() + "##" + etStartTime2.getText().toString() + "##" + etEndTime2.getText().toString();
 selectionItems.add(firstDay);
 selectionItems.add(secondDay);
 String[] blist = new String[selectionItems.size()];
 Log.e("tag", "array" + blist.length + selectionItems);

  for (int i = 0; i < selectionItems.size(); i++) {
        blist[i] = selectionItems.get(i);
}
 Log.e("tag", "arrayList" + blist[0]);
 weekdata = new JSONArray();


 for (int i = 0; i < blist.length; i++) {
     weekdata.put(  blist[i]  );   
 }

转换成 json 发送到 volley 中:

HashMap<String, String> params = new HashMap<String, String>();

params.put("package_id", package_id);
params.put("week", weekName);
params.put("weekdata",weekdata.toString() );


JSONObject obj = new JSONObject(params);

我得到如下数据:

{"weekdata":"[\"2019-04-01##5:0##5:0\",\"2019-04-02##5:0##5:0\"]","package_id":"44","week":"Apr 01, 2019"}

如何将其转换为以下格式:

 {"week":"Apr 22, 2019","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}

请帮忙。

【问题讨论】:

  • @Jean-BaptisteYunès 这将无济于事,因为她定义了 Map 是否应该有 String, String 所以在内部它将调用 toString 方法()。

标签: android json android-volley


【解决方案1】:

发生这种情况是因为您已将 Map 定义为 Map 并使用 toString() 方法将列表转换为 String。这是用 .您应该将您的 Map 定义为 Map,并且在将其放入 Map 时不要使用 toString 方法。

代码:

HashMap<String, Object> params = new HashMap<String, Object>();

params.put("package_id", package_id);
params.put("week", weekName);
params.put("weekdata",weekdata);


JSONObject obj = new JSONObject(params);

这里的一个问题是您为什么要使用 Map?有什么特别的原因吗?

您可以直接从 JSONObject 创建 JSON。

示例代码:

JSONObject jsonObject = new JSONObject();
jsonObject.put("package_id", package_id);
jsonObject.put("week", weekName);
jsonObject.put("weekdata",weekdata);

使用 JSONObject,您不必担心泛型。

【讨论】:

    【解决方案2】:

    根据您的问题,

    我怎样才能把它转换成下面的格式:

    {"week":"2019 年 4 月 22 日","package_id":23,"weekdata":["2019-05-07##14:00##16:45"]}

    String firstDay = etDate1.getText().toString() + "##" + 
    etStartTime1.getText().toString() + "##" + etEndTime1.getText().toString();
    String secondDay = etDate2.getText().toString() + "##" + 
    etStartTime2.getText().toString() + "##" + etEndTime2.getText().toString();
    selectionItems.add(firstDay);
    selectionItems.add(secondDay);
    String[] blist = new String[selectionItems.size()];
    Log.e("tag", "array" + blist.length + selectionItems);
    
    for (int i = 0; i < selectionItems.size(); i++) {
        blist[i] = selectionItems.get(i);
    }
    Log.e("tag", "arrayList" + blist[0]);
    JsonArray weekdata = new JSONArray();
    
    
    for (int i = 0; i < blist.length; i++) {
     weekdata.put(  blist[i]  );   
    }
    
    After this wrap this in the JsonObject
    
    
    
    JsonObject jsonObject = new JsonObject();
    jsonObject.put("package_id", package_id);
    jsonObject.put("week", weekName); 
    jsonObject.put("weekdata",weekdata);
    
    Log.e("jsonResult",jsonObject.toString());
    

    试试这个,让我知道@mishti。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2011-08-12
      • 1970-01-01
      • 2019-01-16
      相关资源
      最近更新 更多