【问题标题】:Java Append object to JSONJava 将对象附加到 JSON
【发布时间】:2025-12-20 10:35:11
【问题描述】:

我想将 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 的情况下这样做。

感谢您的帮助..

【问题讨论】:

    标签: java json


    【解决方案1】:

    您的代码没有任何问题。它确实附加了

    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 :)
    • 糟糕,抱歉。我没有看到您的代码有任何问题。只是通过它检查。理想情况下,它应该附加。
    • 对不起,我在自己的代码中犯了错误,累积工作正常。
    【解决方案2】:

    简单的方法

        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"}]}
    

    【讨论】:

      【解决方案3】:

      如果您想为对象添加新值,您也可以尝试以下方法

      之前:

      {
          "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"
      }
      

      【讨论】:

        最近更新 更多