【问题标题】:Convert Key Value pairs to Json将键值对转换为 Json
【发布时间】:2019-07-23 21:33:45
【问题描述】:

我正在尝试使用从数据库中收到的某些数据,格式如下,在 Python 中编码如下:

('ACTION_CODE', 'S')
('ARRIVAL_DATE', '03-JUL-19')
('BIT_FLAGS', '1082131456')
('CONFIG_DATA_SOURCE', 'SPT')

我使用下面的代码来获得上述结果:

print("Object length :", len(rv.value.items()))   #rv is database row and I am iterating across database columns for one row 
for k, v in (rv.value.items()):  # Iterate over the key value pairs
    kv = k, v
    print((kv))

我想获取 JSON 格式的数据 kv 以使用 json.dumps(kv) ...其中 kv 是 json.dumps function 可接受的格式。如何编写代码来获取 kv ? 请帮忙

还提到我将这些数据反馈给 GraphQL,所以我的架构定义有点受限......

最终目标是使用 json2obj(json.dumps(kv)) :

def _json_object_hook(d):
    return namedtuple("X", d.keys())(*d.values())


def json2obj(data):
    return json.loads(data, object_hook=_json_object_hook)

【问题讨论】:

  • 能否请您也添加 rv.value 的打印?
  • 在 for 循环中声明并填充 dict 数据结构。然后使用这个dict在for循环外使用json.dumps(dict)生成json。
  • print (rv.value) 返回如下:{'ACTION_CODE': 'S', 'ARRIVAL_DATE': '03-JUL-19', 'BIT_FLAGS': '1082131456', 'CONFIG_DATA_SOURCE': 'SPT'}
  • rv.value 是一个字典,你可以做json.dumps(rv.value)
  • 不能使用 json.dumps(rv.value) 因为我必须得到一个从 json2obj 函数返回命名元组的列表。 .对不起,我稍后编辑了

标签: python graphql


【解决方案1】:

没有更多数据,我有点在黑暗中编码,但这是我的建议:

result = {}

for k, v in rv.value.items():
    result[k] = v

json_data = json.dumps(result)
print(json_data)

编辑: 从现在开始,我在您的 cmets 中看到 rv.value 已经包含字典,因此转换非常简单:

#rv.value.items = {'ACTION_CODE': 'S', 'ARRIVAL_DATE': '03-JUL-19', 'BIT_FLAGS': '1082131456', 'CONFIG_DATA_SOURCE': 'SPT'}
result = []
for key, value in rv.value.items():
    result.append({key : value})
print(result)
# Then the JSON conversion will be simple
json_data = json.dumps(result)
print(json_data)

【讨论】:

  • 嘿@Pitto .. json.dumps(rv.value) 已经给我了 {"ACTION_CODE": "S", "ARRIVAL_DATE": "03-JUL-19", "BIT_FLAGS ": "1082131456" } ...我想我希望这个字典列表如下所示,以便 GraphQL 正确返回:[ {"ACTION_CODE": "S"}, {"ARRIVAL_DATE": "03-JUL-19"} , {"BIT_FLAGS": "1082131456" } ]
  • @pauldx 我已经了解您的要求,我正在更新代码
【解决方案2】:

在 for 循环之前声明这个

dict = {}

在 for 循环中将键值对添加到 dict

dict[key] = value

在for循环转储之后

json.dumps(dict)
import json
dict = {}
dict['a'] = 'b'
dict['c'] = 'd'
json.dumps(dict)

输出:'{"a": "b", "c": "d"}'

编辑:根据所需的输出格式,这里是代码:

import json
dict1 = {'a':'b'}
dict2 = {'c':'d'}
result=[]
result.append(dict1)
result.append(dict2)
print(json.dumps(result))

Output: [{"a": "b"}, {"c": "d"}] 

【讨论】:

  • json.dumps(rv.value) 已经给了我...我想我希望将其作为字典列表,如下所示:[ {"ACTION_CODE": "S"}, {"ARRIVAL_DATE ": "03-JUL-19"} , {"BIT_FLAGS": "1082131456" } ]
  • 添加了上面的代码。使用添加字典的列表并转储列表。
猜你喜欢
  • 2020-08-30
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2018-02-20
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多