【问题标题】:How to update a JSON array in a Java如何在 Java 中更新 JSON 数组
【发布时间】:2023-03-23 21:31:01
【问题描述】:

我有一个 JSON 文件名 abc.json 一旦我打开这个文件,就会有方括号中的数据。

[{
"1" : "xxx",
"20" : "ppp",
"25" : "hhh"
}]

这里的键是未知的。我想添加新的键值对,根据一些键值更新值并删除一些字段。 我必须使用com.google.code 库。

【问题讨论】:

  • 太棒了...您还能告诉我如何在同一个 JSON 文件中添加新字段,该字段应保持方括号作为开始和结束吗?提前致谢
  • 为什么要更新 JSON 文件?这是 JSON 的非标准用法。如果要存储数据,则应考虑使用数据库,例如 SQLite 或 Realm,而不是 JSON 文件。
  • 另请注意,如果此 JSON 文件存储在您的 Android Studio 包中的 resasset 中,则无论如何您都无法对其进行更新。 (至少不容易)
  • 这是@Code-Apprentice 的正确观点。但正如我的一位朋友所问的那样,他的组织给出了这样的任务。他们正在使用 Java 构建 API。请问有什么办法吗?提前致谢。

标签: java android json spring spring-boot


【解决方案1】:

正如在 cmets 中已经说过的,这种架构存在一些缺陷。

但是,由于json对象在java中基本上是一个Map,你可以使用jacksonlib来反序列化json,在map中添加一个值,然后用jackson再次序列化它。请看下面的代码:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;


class ObjectMapperTest {


    @Test
    void test_json_array_of_map() throws JsonProcessingException {
        String jsonAsString = "[{\"1\":\"xxx\",\"20\":\"ppp\",\"25\":\"hhh\"}]";

        ObjectMapper objectMapper = new ObjectMapper();
        List<Map<String,String>> deserialized = objectMapper.readValue(jsonAsString, new TypeReference<>() {
        });
        deserialized.get(0).put("myNewKey", "myNewValue");

        System.out.println(objectMapper.writeValueAsString(deserialized));
    }

}

这将为您提供以下输出:

[{"1":"xxx","20":"ppp","25":"hhh","myNewKey":"myNewValue"}]

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2021-09-03
    • 2017-09-19
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多