【问题标题】:Reformat JSON file?重新格式化 JSON 文件?
【发布时间】:2016-10-19 18:40:13
【问题描述】:

我有两个 JSON 文件。

文件 A:

  "features": [
  {
   "attributes": {
    "NAME": "R T CO",
    "LTYPE": 64,
    "QUAD15M": "279933",
    "OBJECTID": 225,
    "SHAPE.LEN": 828.21510830520401
   },
   "geometry": {
    "paths": [
     [
      [
       -99.818614674337155,
       27.782542677671653
      ],
      [
       -99.816056346719051,
       27.782590806976135
      ]
     ]
    ]
   }
  }

文件 B:

  "features": [
{
  "geometry": {
    "type": "MultiLineString",  
    "coordinates": [
      [
        [
          -99.773315512624,
          27.808875128096
        ],
        [
          -99.771397939251,
          27.809512259374
        ]
      ]
    ]
  },
  "type": "Feature",
  "properties": {
    "LTYPE": 64,
    "SHAPE.LEN": 662.3800009247,
    "NAME": "1586",
    "OBJECTID": 204,
    "QUAD15M": "279933"
  }
},

我希望重新格式化文件 B,使其看起来像文件 A。 将“properties”更改为“attributes”,将“coordinates”更改为“paths”,并删除“type”:“MultiLineString”和“type”:“Feature”。通过 python 执行此操作的最佳方法是什么?

有没有办法重新排序“属性”键值对,使其看起来像文件 A?

这是一个相当大的数据集,我想遍历整个文件。

【问题讨论】:

  • 你试过什么? SO上有很多JSON + Python的答案,他们有没有带你去任何地方?
  • json 模块可让您将 json 文件加载到 python 数据结构中,然后稍后将它们保存回 json。所以这是一个循环遍历你得到的 python dictlist 项目的问题。这主要是一项繁琐的簿记操作,您可以自己完成这部分!
  • 在 Python 中,JSON 对象只是字典——所以只需读入一个文件,更改字典的内容,然后将其写出另一个文件。

标签: python json reformatting


【解决方案1】:

在 Python 中处理 JSON 是 input-process-output model 编程的理想选择。

对于输入,您可以使用json.load() 将外部 JSON 文件转换为 Python 数据结构。

对于输出,您可以使用 json.dump() 将 Python 数据结构转换为外部 JSON 文件。

对于处理或转换步骤,使用普通的 Python dictlist 方法做任何你需要做的事情。

这个程序可能会做你想做的事:

import json

with open("b.json") as b:
    b = json.load(b)

for feature in b["features"]:

    feature["attributes"] = feature["properties"]
    del feature["properties"]

    feature["geometry"]["paths"] = feature["geometry"]["coordinates"]
    del feature["geometry"]["coordinates"]

    del feature["geometry"]["type"]

    del feature["type"]

with open("new-b.json", "w") as new_b:
    json.dump(b, new_b, indent=1, separators=(',', ': '))

【讨论】:

  • 谢谢,这正是我所需要的。我之前没有使用过 JSON 库。
【解决方案2】:

怎么样:

cat <file> | python -m json.tool

这会将文件的内容重新格式化为人类可读的统一格式。如果您确实需要更改字段的名称,您可以使用 sed。

cat <file> | sed -e 's/"properties"/"attributes"/'

这对于您的用例可能已经足够了。如果您有需要更细微解析的内容,则必须阅读如何通过 ORM 库管理 JSON。

【讨论】:

  • 我在 Python 中处理 JSON 的能力还不错,但这个答案对我来说毫无意义。这是在做什么以及如何做的?
  • 考虑到两个 json 对象是怎么回事?
  • json.tool 确实存在......哇,我很惊讶......但它所做的只是漂亮地打印 json......我认为
  • @JoranBeasley 所以这是一个很好的解决方案,但不是一个很好的解决方案?
  • @tdelaney 我认为“解决方案”需要在那里删除
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 2016-08-26
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2015-12-07
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多