【问题标题】:Java add json key value at the beginningJava开头添加json键值
【发布时间】:2020-06-24 06:25:34
【问题描述】:

我有一个 json 字符串 jsonstring 看起来像这样

{
  "Users": [
    {
      "Name": "Appli",
      "ID": "519"
    },
    {
      "Name": "Dash",
      "ID": "602"
    }
  ]
}

如何在用户前面添加一个键值对,如下所示:

{
  "Department":"Accounting", 
  "Users": [
    {
      "Name": "Appli",
      "ID": "519"
    },
    {
      "Name": "Dash",
      "ID": "602"
    }
  ]
}

【问题讨论】:

  • 根据规范,顺序应该无关紧要。 “对象是一组无序的名称/值对。” . stackoverflow.com/questions/16870416/…
  • 使用 JSON 库,然后解析 JSON 文本,添加额外的键/值对,并重新生成 JSON 文本。具体如何操作完全取决于您选择的 JSON 库。

标签: java json


【解决方案1】:

您好,您可以尝试将 String 格式化为 JSONObject ,然后使用 JSONObject 设置键值

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Error", err.toString());
}

【讨论】:

    【解决方案2】:

    要解决这种特定情况,您可以识别模式并使用String.replaceAll 方法,如下所示:

    String usersWithDepartment = jsonstring.replaceAll(
        "(\"Users\":\\s*\\[)", // find a pattern for "Users" element
        "\"Department\": \"Accounting\",\n  $1" // add a prefix and keep the group $1 as is
    );
    System.out.println(usersWithDepartment);
    

    这是一个快速修复,当然更合适的方法是使用 cmets 中提到的一些 JSON 处理库。

    更新

    如果\"Users\" 数组在输入字符串中可能出现多次,并且您只需要在第一次出现时添加前缀,则正则表达式应更改为:

    String usersWithDepartment = jsonstring.replaceAll(
        "(?s)(\"Users\":\\s*\\[.*$)", // grab entire string, enable multiline selection
        "\"Department\": \"Accounting\",\n  $1" // add prefix
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2012-10-08
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多