在JSON文件中替换字符串

3
"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文件的一部分。我需要使用脚本编辑hosts部分,使用两个不同的IP地址。有人有什么想法吗?


2
是的。1.将文件加载到Python对象中。2.循环遍历对象,按需替换每个字典的“host”值。3.转换回JSON并保存。您在哪个部分有困难? - PM 2Ring
发布替换项 - RomanPerekhrest
2个回答

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

如果我需要更改保存在文件中,我应该怎么办? - SANITH
将其重定向到新文件中,使用 jq ... file.json > new.jsonjq 没有原地选项。 - James Brown
还有一个问题,如果我从一个变量中指向值,它会起作用吗?意思是 jq '.|.cassandra.host="$ip"' file.json,其中 $p=1.1.1.1。 - SANITH
如果你引用正确,我会假设:ip=asdasd; jq ".|.cassandra.host=\"$ip\"" file.json - James Brown
1
正确的...以下也可以工作...... ip="1.1.1.1" && jq --arg ip $ip '.|.cassandra.host=$ip' file.json - SANITH

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

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