我有一个来自HTTP请求的响应(作为JSONArray)。 json响应中的值有一些键,其名称为Total_x200_Price
或Creation_x200_Date
(即具有“ 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"}
]
我需要对具有这样名称的每个键进行申请。我尝试更改为字符串并返回,但是速度太慢?任何更好的主意
答案 0 :(得分:1)
答案 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);