【问题标题】:JSON schema conversion in python [closed]python中的JSON模式转换[关闭]
【发布时间】:2017-07-24 00:54:34
【问题描述】:

如何在python中进行JSON模式转换? 我知道 Jolt 服务于这个目的,但它在 Java 中。 我有 2 个 JSON 对象,一个是输入,第二个是映射器。我试图通过遍历 2 个 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
  • ping @franz-kafka IIRC 你已经对这个问题提出了赏金,但现在它已经关闭,希望你能提供一些反馈。
  • @georgexsh 既然问题已经结束,我该如何接受答案并给你赏金?老实说,我觉得这个问题首先被关闭是荒谬的。无论如何,你的回答很好,因为它对我有帮助。我只是希望有一些东西允许像 Jolt 这样的 JSON 类型 DSL,您可以在其中用 JSON 编写规范,然后将其用作输入如何转换为输出的说明。
  • @FranzKafka我对Jolt一无所知,但是jq丰富的表达能力可以和jolt IMO媲美。

标签: python json


【解决方案1】:

听起来您的需求可以通过jq 来完成。有python绑定,见this question

但是在不知道你的输入输出格式的情况下,不能轻易说jq就是你的选择。


this question中的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))

产量:

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

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2012-09-10
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多