1

我有两个 JSON 文件。

档案一:

  "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。将“属性”更改为“属性”,将“坐标”更改为“路径”,并删除“类型”:“MultiLineString”和“类型”:“功能”。通过 python 执行此操作的最佳方法是什么?

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

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

4

2 回答 2

5

在 Python 中操作 JSON 是输入-过程-输出编程模型的一个很好的候选。

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

对于输出,您可以使用json.dump().

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

该程序可能会执行您想要的操作:

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=(',', ': '))
于 2016-10-19T18:58:03.063 回答
-2

关于什么:

cat <file> | python -m json.tool

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

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

这可能足以满足您的用例。如果您有一些需要更细微解析的内容,则必须阅读有关如何通过 ORM 库管理 JSON 的内容。

于 2016-10-19T18:43:14.960 回答