python - 重组 JSON

标签 python json

需要将 JSON 重组为 Python 中的新结构。

例如:

{
  'a' : 1,
  'b' : 1,
  'd' : {'d1' : '1', 'd2' : 2},
  'm' : [
    {'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
    {'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
  ]
}

{
  'new_a' : 1,
  'new_d' : {'new_d1' : '1', 'new_d2' : 2},
  'new_m' : [
    {'new_x' : 6, 'new_z' : {'new_foo' : 'foo1', new_'bar : 'bar1'} },
    {'new_x' : 8, 'new_z' : {'new_foo' : 'foo2', 'new_bar : 'bar2'} }
  ]
}

有一个旧JSON的新形式的想法

有没有更优雅的方式来做到这一点?

import json

new_data = {}
new_data['new_a'] = old_data['a']
new_data['new_d'] = {}
new_data['new_d']['new_d1'] = old_data['d']['d1']
new_data['new_d']['new_d2'] = old_data['d']['d2']
new_data['new_m'] = {}
new_m = []
for m in old_data:
    new_m.append({'new_x' : m['x'], 'new_z' : {'new_foo' ....

最佳答案

您提到了结果代码必须删除“少数字段”的要求。使用处理字典和列表的递归循环,我们可以将所有键更改为 new_ 并删除您指定的任何字段。

a = {
  'a' : 1,
  'b' : 1,
  'd' : {'d1' : '1', 'd2' : 2},
  'm' : [
    {'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
    {'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
  ]
}

def rename(dt):
    ndt = {}
    for k, v in dt.iteritems():
        if k == 'y':  # the keys that you wish to remove from the new dictionary
            continue
        if isinstance(v, dict):
            ndt['new_' + k] = rename(v)
        elif isinstance(v, list):
            ndt['new_' + k] = [rename(x) for x in v]
        else:
            ndt['new_' + k] = v
    return ndt

print rename(a)  # your expected dictionary

如果需要进行任何结构重组(例如,您想将一个值移到其他地方,或者如果您不想遵循现有的命名约定),那么您现有的代码已经是最简洁的方法所以。

关于python - 重组 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851288/

相关文章:

python 自省(introspection)不显示 Lock 的函数

javascript - 使用嵌入式记录和 Ember 数据

mysql - 数据库设计——使用JSON存储信息

json - 使用 JSON 的 API 到 TableView

json - swift4 可解码方法正确的结构来解析埋在 JSON 中的数组?

java - 嵌套的 JSONObject

python - 在 Django 中渲染模板变量时出现问题

Python 按位与多个数字,比迭代按位运算符更快的方法?

python - 如何停止无限 while 循环 python emacs

python - 用 Python 高级水平条形图?