更改JSONArray中某些键的名称

时间:2019-04-24 13:19:38

标签: java arrays json

我有一个来自HTTP请求的响应(作为JSONArray)。 json响应中的值有一些键,其名称为Total_x200_PriceCreation_x200_Date(即具有“ x200 ”),而不是每个空格。所以我的程序找不到该数据。我需要更改此类字段的键,以使用类似

的方式将“ x200 ”替换为“”
.replaceAll("_x0020_"," ");

是否有一种干净的Java方式迭代JSON密钥并将其应用于每个密钥。

  

org.json.JSONArray;

即我的json如下

[
  {name: "selim", Creation_x200_Date: "1/2/2010"},
  {name: "JOhn", Creation_x200_Date: "1/6/2010"}
]

我需要对具有这样名称的每个键进行申请。我尝试更改为字符串并返回,但是速度太慢?任何更好的主意

2 个答案:

答案 0 :(得分:1)

  

所以我的程序找不到该数据。

手动替换字符串不是解决方案。

我尝试解析它,然后得到输出。 Creation_x200_Date 是正确的。

请参阅下文。

Sample Demo Of parsing your json

答案 1 :(得分:0)

这是我认为您需要的。它正在创建一个新的 org.json.JSONArray 。虽然,如果我的想法正确的话,很可能您将使用JSONArray jarr = new JSONArray(responceBodyString);生成HTTP Response JSONArray,如果正确的话,那么我认为用JSONArray jarr = new JSONArray(responceBodyString.replaceAll("_x200_"," "));替换上面的行会更有效。

    String jsonString = "[{name: \"selim\", Creation_x200_Date: \"1/2/2010\"}, {name: \"JOhn\", Creation_x200_Date: \"1/6/2010\"}]";
    JSONArray originalJArray = new JSONArray(jsonString);
    JSONArray jsonArrayWithSpaces = new JSONArray();
    for (int i = 0; i < originalJArray.length(); i++)
    {
        JSONObject jobj = originalJArray.getJSONObject(i);
        @SuppressWarnings("unchecked")
        Iterator<String> keysItr = jobj.keys();
        JSONObject jobj1 = new JSONObject();
        keysItr.forEachRemaining(new Consumer<String>()
        {
            @Override
            public void accept(String t)
            {
                try
                {
                    jobj1.put(t.replaceAll("_x200_"," "), jobj.get(t));
                }catch (JSONException e){e.printStackTrace();}
            }
        }
        );
        jsonArrayWithSpaces.put(jobj1);
    }
    System.out.println(jsonArrayWithSpaces);