Java向JSON添加对象

7
我想将JSON对象附加到现有的JSON数组中,以获得像这样的数据结构。
"results":[
      {
         "lat":"value",
         "lon":"value"
      }, 
      {
         "lat":"value",
         "lon":"value"

      }
    ]

我正在尝试使用示例代码进行操作,但不幸的是每次都会覆盖整个对象。

    Log.i(AppHelper.APP_LOG_NAMESPACE, "POSITIONS AVAILABLE " + jsonDataString);
                AppHelper helper = new AppHelper(ctx);
                JSONObject mainObject = new JSONObject(jsonDataString);
                JSONObject valuesObject = new JSONObject();
                JSONArray list = new JSONArray();
                //putv given values to the JSON
                valuesObject.put("lat", lat.toString());
                valuesObject.put("lon", lon.toString());
                valuesObject.put("city", city);
                valuesObject.put("street", street);
                valuesObject.put("date", helper.getActualDateTime());
                valuesObject.put("time", helper.getActualDateTime());
                list.put(valuesObject);
                //mainObject.put("values", list);
                mainObject.accumulate("values", list);
                saveJsonData(ctx, mainObject.toString(),"positions");

应该怎么做才对?

每次重写所有以前的值并将其累加,但我希望追加这个对象:

{
     "lat":"value",
     "lon":"value"
  },

进入结果父级。

顺便说一下:我希望不使用GSON来完成。

感谢任何帮助。

3个回答

7

您的代码没有问题。它确实进行了追加

String jsonDataString = "{\"results\":[{\"lat\":\"value\",\"lon\":\"value\" }, { \"lat\":\"value\", \"lon\":\"value\"}]}";
JSONObject mainObject = new JSONObject(jsonDataString);
JSONObject valuesObject = new JSONObject();
JSONArray list = new JSONArray();
valuesObject.put("lat", "newValue");
valuesObject.put("lon", "newValue");
valuesObject.put("city", "newValue");
valuesObject.put("street", "newValue");
valuesObject.put("date", "newValue");
valuesObject.put("time", "newValue");
list.put(valuesObject);
mainObject.accumulate("values", list);
System.out.println(mainObject);

这将打印出如下的内容:{"values":[[{"date":"newValue","city":"newValue","street":"newValue","lon":"newValue","time":"newValue","lat":"newValue"}]],"results":[{"lon":"value","lat":"value"},{"lon":"value","lat":"value"}]}。这符合你的期望吗?
使用gson,你可以像这样实现:
import com.google.gson.Gson;
import com.google.gson.JsonObject;


public class AddJson {

    public static void main(String[] args) {
        String json = "{\"results\":[{\"lat\":\"value\",\"lon\":\"value\" }, { \"lat\":\"value\", \"lon\":\"value\"}]}";
        Gson gson = new Gson();
        JsonObject inputObj  = gson.fromJson(json, JsonObject.class);
        JsonObject newObject = new JsonObject() ;
        newObject.addProperty("lat", "newValue");
        newObject.addProperty("lon", "newValue");
        inputObj.get("results").getAsJsonArray().add(newObject);
        System.out.println(inputObj);
    }

}

没有使用GSON?我写了我在这种情况下不会使用GSON :) - redrom
抱歉,我没有看到您的代码有任何问题。只是在检查一下。理想情况下,它应该进行追加。 - Syam S
很抱歉,我在自己的代码中犯了一个错误,但累加功能正常工作。 - redrom

4

Simple Approach

    String jsonData = "{\"results\":[{\"lat\":\"value\",\"lon\":\"value\" }]}";
    System.out.println(jsonData);
    try {
        JSONArray result = new JSONObject(jsonData).getJSONArray("results");
        result.getJSONObject(0).put("city","Singapore");
        jsonData = "{\"results\":"+result.toString()+"}";
        System.out.println(jsonData);
    } catch (JSONException e) {
        e.printStackTrace();
    }

输出前添加
{"results":[{"lat":"value","lon":"value" }]} 

添加后的输出

{"results":[{"lon":"value","lat":"value","city":"Singapore"}]}

0
如果您想向对象添加新值,也可以尝试以下方法:
之前:
{
    "Name": "EnCoMa",
    "Manager": "Abhishek Kasetty"
 }

代码:

JsonFactory factory = new JsonFactory();      
ObjectMapper mapper = new ObjectMapper(factory);
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
    String json = ow.writeValueAsString(TheObjectToWhichYouWantToAddNewValue);
    ObjectNode node = (ObjectNode) mapper.readTree(json);
    node.putPOJO("new Key","new value")

之后:

{
    "Name": "EnCoMa",
    "Manager": "Abhishek Kasetty",
    "new Key": "new value"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接