【问题标题】:Replace String in a JSON file替换 JSON 文件中的字符串
【发布时间】:2018-05-04 22:06:40
【问题描述】:
"cassandra": {
    "host": "1.1.1.1",
    "portNo": "9042",
    "keyspace": "good"
},
"postgres": {
    "host": "2.2.2.2",
    "portNo": "5432",
    "database": "dude",
    "username": "root",
    "password": "something"
}

这是 json 文件的一部分。我需要使用脚本编辑具有两个不同 IP 的主机部分。大家有什么想法

【问题讨论】:

  • 是的。 1. 将文件加载到 Python 对象中。 2. 循环对象,根据需要替换每个字典的"host" 值。 3. 转换回 JSON 并保存。你在哪方面有困难?
  • 发布替换物品

标签: python json bash shell awk


【解决方案1】:

可以使用Json python包

import json

my_bytes_value = response.content
my_json = my_bytes_value.decode('utf8')
jsonResponse = json.loads(my_json)
resultCount = jsonResponse["cassandra"]

【讨论】:

    【解决方案2】:

    使用jq获取正确的json(上面的数据被{}包围):

    $ jq '.|.cassandra.host="foo"' file.json
    {
      "cassandra": {
        "host": "foo",
        "portNo": "9042",
        "keyspace": "good"
      },
      "postgres": {
        "host": "2.2.2.2",
        "portNo": "5432",
        "database": "dude",
        "username": "root",
        "password": "something"
      }
    }
    

    【讨论】:

    • 如果我需要在文件中进行更改。我该怎么办?
    • 使用jq ... file.json > new.json 将其重定向到一个新文件。 jq 没有就地选项。
    • 还有一个问题,如果我从变量中指向值,它是否有效。表示 jq '.|.cassandra.host="$ip"' file.json 。其中 $p=1.1.1.1
    • 如果你引用正确,我会假设:ip=asdasd; jq ".|.cassandra.host=\"$ip\"" file.json
    • 对 ....以下也有效.................. ip="1.1.1.1" && jq --arg ip $ip '.|.cassandra.host=$ip' 文件.json
    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2017-09-04
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多