这似乎很简单,但我正在努力改变这个:
{
"myList": [{
"id": 1,
"type": "EnergyBox",
"properties": ["Name : Eb1", "Prop2 : Val1", "PropN : ValN"]
}, {
"id": 2,
"type": "EnergyBox",
"properties": ["Name : Eb2", "Prop2 : Val2", "Prop3 : Val3"]
}]
}
进入这个:
{
"myList": [{
"id": 1,
"type": "EnergyBox",
"properties": {
"Name": "Eb1",
"Prop2": "Val1",
"PropN": "ValN"
}
}, {
"id": 2,
"type": "EnergyBox",
"properties": {
"Name": "Eb2",
"Prop2": "Val2",
"Prop3": "Val3"
}
}]
}
我正在使用Java 8,Jackson和Simplejson来解析数据,但不知何故,经过几个小时的尝试,仍然没有工作。
我试图根据您的要求转换Json,尝试以下代码。
public void test() throws JsonParseException, JsonMappingException, IOException {
String json = "{"+
"\"myList\": [{"+
"\"id\": 1,"+
"\"type\": \"EnergyBox\","+
"\"properties\": [\"Name : Eb1\", \"Prop2 : Val1\", \"PropN : ValN\"]"+
"}, {"+
"\"id\": 2,"+
"\"type\": \"EnergyBox\","+
"\"properties\": [\"Name : Eb2\", \"Prop2 : Val2\", \"Prop3 : Val3\"]"+
"}]"+
"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
JsonNode myList = root.get("myList");
myList.forEach(n -> {
System.out.println(n);
System.out.println(n.get("properties"));
ObjectNode updatedProperties = mapper.createObjectNode();
n.get("properties").forEach(p -> {
String[] vals = p.textValue().split(":");
updatedProperties.put(vals[0].trim(), vals[1].trim());
});
((ObjectNode)n).put("properties", updatedProperties);
});
System.out.println(myList);
}
像一个字符串这样的属性中的键值是否可以?为此目的,这应该工作:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(jsonString);
JSONArray array = (JSONArray) json.get("myList");
for( int i = 0; i < array.size(); i++) {
JSONObject object = (JSONObject) array.get(i);
JSONArray jsonArray = (JSONArray) object.get("properties");
JSONObject newJObj = new JSONObject();
for(int j = 0; j < jsonArray.size(); j++) {
String[] keyValue = jsonArray.get(j).toString().split(" : ");
newJObj.put(keyValue[0], keyValue[1]);
}
newJObj.toJSONString();
object.put("properties", newJObj);
}
json.toJSONString();
JSONObject response= Array.getJSONObject(insert_your_Response);
try {
JSONArray Array = response.getJSONArray("myList");
assert Array != null;
for (int k = 0; k < Array.length(); k++) {
try {
JSONObject object1 = Array.getJSONObject(k);
int id = object1.getInt("id");
String type = object1.getString("type");
JSONObject propertiesObject=object1.getJSONObject("properties");
String Name = propertiesObject.getString("Name");
String Prop2 = propertiesObject.getString("Prop2");
String Prop3 = propertiesObject.getString("Prop3");
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (JSONException e) {
e.printStackTrace();
}