Java - Json数组到json对象

问题描述 投票:1回答:3

这似乎很简单,但我正在努力改变这个:

{
    "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来解析数据,但不知何故,经过几个小时的尝试,仍然没有工作。

java json jackson simplejson
3个回答
1
投票

我试图根据您的要求转换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);


}

1
投票

像一个字符串这样的属性中的键值是否可以?为此目的,这应该工作:

        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();

1
投票
           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();
        }
© www.soinside.com 2019 - 2024. All rights reserved.