如何在Python和Bash中解析JSON?

时间:2018-05-27 12:13:36

标签: python json bash

我需要通过Bash和Python解析下面的JSON。我得到了不同的错误。

从JSON我想获取名称和ObjectID信息并将其放在数组上。但不知道该怎么做。

JSON示例:

  {
    "aliases": [],
    "localizations": {},
    "name": "Super DX-Ball",
    "popularity": 0,
    "objectID": "7781",
    "_highlightResult": {
      "name": {
        "value": "Super DX-<em>Ba</em>ll",
        "matchLevel": "full",
        "fullyHighlighted": false,
        "matchedWords": [
          "ba"
        ]
      }
    }
  },
  {
    "aliases": [],
    "localizations": {},
    "name": "Katekyo Hitman Reborn! DS Flame Rumble X - Mirai Chou-Bakuhatsu!!",
    "popularity": 0,
    "objectID": "77522",
    "_highlightResult": {
      "name": {
        "value": "Katekyo Hitman Reborn! DS Flame Rumble X - Mirai Chou-<em>Ba</em>kuhatsu!!",
        "matchLevel": "full",
        "fullyHighlighted": false,
        "matchedWords": [
          "ba"
        ]
      }
    }
  },
  {
    "aliases": [],
    "localizations": {},
    "name": "Bagitman",
    "popularity": 0,
    "objectID": "7663",
    "_highlightResult": {
      "name": {
        "value": "<em>Ba</em>gitman",
        "matchLevel": "full",
        "fullyHighlighted": false,
        "matchedWords": [
          "ba"
        ]
      }
    }
  },
  {
    "aliases": [],
    "localizations": {},
    "name": "Virtual Bart",
    "popularity": 0,
    "objectID": "7616",
    "_highlightResult": {
      "name": {
        "value": "Virtual <em>Ba</em>rt",
        "matchLevel": "full",
        "fullyHighlighted": false,
        "matchedWords": [
          "ba"
        ]
      }
    }
  }

由于很少有独立的jsons,我得到了错误。这是一个例子:

cat /tmp/out | jq ".name"
"Fortnite"
parse error: Expected value before ',' at line 35, column 4

1 个答案:

答案 0 :(得分:3)

输入JSON看起来像一个数组但没有括号。尝试添加它们:

$ (echo '['; cat /tmp/out; echo ']') | jq 'map({ name, objectID })'
[
  {
    "name": "Super DX-Ball",
    "objectID": "7781"
  },
  {
    "name": "Katekyo Hitman Reborn! DS Flame Rumble X - Mirai Chou-Bakuhatsu!!",
    "objectID": "77522"
  },
  {
    "name": "Bagitman",
    "objectID": "7663"
  },
  {
    "name": "Virtual Bart",
    "objectID": "7616"
  }
]