猿问

如何使用 Python 从 JSON 文件中提取列表中所有对象的特定字段

我正在尝试为列表中的每个对象提取一个特定的字段,它在 JSON 中的值,到目前为止,我已经开始一个一个地获取它们,但是如果有更多的对象具有相同的字段,它需要提取所有这些字段被添加到 JSON 中。


这是 JSON:


[{

    "took" : 1023,

    "timed_out" : false,

    "_shards" : {

      "total" : 5,

      "successful" : 5,

      "skipped" : 0,

      "failed" : 0

    },

    "hits" : {

      "total" : 1,

      "max_score" : 114.88808,

      "hits" : [

        {

          "_index" : 1,

          "_type" : "doc",

          "_id" : 1,

          "_score" : 114.88808,

          "_source" : {

            "message" : "Error something happened"

          }

        }

      ]

    }

  },

  {

    "took" : 1023,

    "timed_out" : false,

    "_shards" : {

      "total" : 5,

      "successful" : 5,

      "skipped" : 0,

      "failed" : 0

    },

    "hits" : {

      "total" : 1,

      "max_score" : 114.88808,

      "hits" : [

        {

          "_index" : 2,

          "_type" : "doc",

          "_id" : 2,

          "_score" : 114.88808,

          "_source" : {

            "message" : "Something else"

          }

        }

      ]

    }

  }

]

我正在尝试从两个对象的字段中获取值message,就我提到的而言,我设法像这样一个一个地完成:


data = json.loads(open('test.json').read())

extracted_data = data[0]['hits']['hits'][0]['_source']['message']


弑天下
浏览 216回答 3
3回答

富国沪深

以下data = [{    "took" : 1023,    "timed_out" : 'false',    "_shards" : {      "total" : 5,      "successful" : 5,      "skipped" : 0,      "failed" : 0    },    "hits" : {      "total" : 1,      "max_score" : 114.88808,      "hits" : [        {          "_index" : 1,          "_type" : "doc",          "_id" : 1,          "_score" : 114.88808,          "_source" : {            "message" : "Error something happened"          }        }      ]    }  },  {    "took" : 1023,    "timed_out" : 'false',    "_shards" : {      "total" : 5,      "successful" : 5,      "skipped" : 0,      "failed" : 0    },    "hits" : {      "total" : 1,      "max_score" : 114.88808,      "hits" : [        {          "_index" : 2,          "_type" : "doc",          "_id" : 2,          "_score" : 114.88808,          "_source" : {            "message" : "Something else"          }        }      ]    }  }]messages = [x['hits']['hits'][0]['_source']['message'] for x in data]print(messages)输出['Error something happened', 'Something else']

繁星coding

尝试这个res = [y['_source']['message'] for x in data for y in x['hits']['hits']]print(res)输出:['Error something happened', 'Something else']

呼啦一阵风

一个简单的 for 循环就可以解决问题:for d in data :    extracted_data.append(d['hits']['hits'][0]['_source']['message'])
随时随地看视频慕课网APP

相关分类

Python
我要回答