简体   繁体   中英

JSONObject with List to String to JsonNode

I convert JSONObject in string for parse it in JsonNode with jackson but i have a List in my JSONObject and when i parse it with a ObjectMapper i get this :

["{Property1 : value1, Property2 : value2}"]

And i can't call myJsonNodeObject.get(i).get("Property1") this is my problem.

I have tried to cast my List in JSONArray in my JSONObject but don't work.

resultAsJSONObject = new JSONObject();
resultAsJSONObject.put("Label", getMetricStatisticsResult.getLabel());
resultAsJSONObject.put("Datapoints", getMetricStatisticsResult.getDatapoints());
resultAsJSONObject.put("fromDate", fromDate.getTimeInMillis());
resultAsJSONObject.put("toDate", toDate.getTimeInMillis());
resultAsJSONObject.put("error", "");
resultAsString = resultAsJSONObject.toString();

mapper.readValue(resultAsString, MetricsData.class);

Assuming that you have a JSON string which you just want to change. Then you can use Jackson to parse it as a ObjecNode and then modify it. Here is an example:

public class JacksonModifyJson {

    static final String JSON = "{\"name\":\"Bob\", \"age\":13}";

    public static void main(String[] args) throws IOException {
        final ObjectMapper mapper = new ObjectMapper();
        final ObjectNode jsonNode = mapper.readValue(JSON, ObjectNode.class);
        jsonNode.put("url", "example.com");
        System.out.println(mapper.writeValueAsString(jsonNode));
    }
}

Output:

{"name":"Bob","age":13,"url":"example.com"}

THis method is really easy and works too

try {

    JSONObject jsonObject = new JSONObject(THESTRINGHERE);
    String[] names = JSONObject.getNames(jsonObject);
    JSONArray jsonArray = jsonObject.toJSONArray(new JSONArray(names));

    ArrayList<String> listdata = new ArrayList<String>();     
    JSONArray jArray = (JSONArray)jsonArray; 
    if (jArray != null) { 
       for (int i=0;i<jArray.length();i++){ 
        listdata.add(jArray.get(i).toString());
       } 
    } 
//  System.out.println(listdata);



} catch (Exception e) {
    System.out.println(e.getMessage());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM