Python中的JSON模式转换

4
如何在Python中进行JSON模式转换? 我知道Jolt可以实现这个目的,但它是用Java编写的。 我有两个JSON对象,一个是输入,另一个是映射器。我尝试通过遍历这两个JSON对象并应用变换来实现此操作。然而,我不确定这是否是一种有效的方法。
以下是一个示例: 输入
{
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": "United States"
     },
     "age": 62,
     "status": "Active"
}

输出

{
     "names": ["Bob Odenkirk"],
     "occupations": ["Software Engineer"],
     "locations": ["San Francisco, CA"]    
}

@FranzKafka,使用JSONPath-rw读取源并创建新的json如何? - Tarun Lalwani
1
ping @franz-kafka 如果我没记错的话,您曾经在这个问题上设置了赏金,但现在它已经关闭了,希望您能提供一些反馈。 - georgexsh
1
@georgexsh,问题已经关闭了,我该如何接受答案并给你悬赏?说实话,我觉得这个问题一开始就被关闭是荒谬的。无论如何,你的回答很好,因为它帮助了我。我只是希望有类似于Jolt的JSON类型DSL,可以在其中编写规范,然后将其用作将输入转换为输出的指令。 - Franz Kafka
1
@FranzKafka 我对Jolt没有了解,但是我认为jq的表达能力是相当丰富的,可以与jolt媲美。 - georgexsh
1个回答

6
听起来你需要用 jq 来完成你的需求。有 Python 绑定,可以看看 这个问题
但是如果不知道你的输入和输出格式,就不能轻易地说 jq 是你的最佳选择。
这个问题 中的 JSON 输入为例,使用 pyjq
import json
import pyjq


json_input = json.loads("""{
    "name": "Bob Odenkirk",
    "title": "Software Engineer",
    "location": {
        "locality": "San Francisco",
        "region": "CA",
        "country": "United States"
    },
    "age": 62,
    "status": "Active"
}""")

r = pyjq.one(
    '{names: [.name], occupations: [.title], locations: [.location.locality + ", " + .location.region]}',
    json_input,
)

print(json.dumps(r, indent=4))

yields:

{
    "names": [
        "Bob Odenkirk"
    ],
    "occupations": [
        "Software Engineer"
    ],
    "locations": [
        "San Francisco, CA"
    ]
}

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