首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从python中的json文件中提取元素

从python中的json文件中提取元素
EN

Stack Overflow用户
提问于 2018-08-07 14:46:59
回答 3查看 717关注 0票数 0

使用Python,我有以下JSON结构:

代码语言:javascript
运行
复制
[
    {
        "id": 1,
        "data": "{'id': '1', 'title': 'title of id 1', 'foo': 'bar', 'fooo': ['bar', 'baar']}"
    },
    {
        "id": 2,
        "data": "{'id': '2', 'title': 'title of id 2', 'foo': 'bar', 'fooo': ['bar', 'baar']}"
    },
    {
        "id": 3,
        "data": "{'id': '3', 'title': 'title of id 3', 'foo': 'bar', 'fooo': ['bar', 'baar']}"
    }
]

我想在一个新的.json中存储数据的第一个元素,如

代码语言:javascript
运行
复制
[
{
 1 : 'title of 1',
 2 : 'title of 2',
...
}
]

现在,我尝试了很多事情,最近的尝试是:

代码语言:javascript
运行
复制
Index = []
for x in checklists:
    item = {"id": x}
    Index.append(x)
return Index

代码语言:javascript
运行
复制
Index = []
for x in checklists:
    x = json.dumps(x)
    Index.append(x.id)
return Index

但每次我试图消除它时,我都会收到同样的错误:

AttributeError:'str‘对象没有属性'id’

这就引出了我的问题。我的json是不是以错误的方式形成的?还是我的功能错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-07 15:13:24

使用ast模块。

Ex:

代码语言:javascript
运行
复制
import ast
index_list = []
for x in checklists:
    val = ast.literal_eval(x["data"])
    index_list.append({x['id']: val["title"]})
return index_list

输出:

代码语言:javascript
运行
复制
[{1: 'title of id 1'}, {2: 'title of id 2'}, {3: 'title of id 3'}]
票数 0
EN

Stack Overflow用户

发布于 2018-08-07 14:54:20

Index.append(x.id)更改为Index.append(x['id'])

这是因为id不是JSON的属性。

票数 0
EN

Stack Overflow用户

发布于 2018-08-07 15:39:03

如果没有最后一步,这需要一些工作才能完成。问题是数据块是一个字符串(它是有效的json),而不是您想要的。

您想要的是数据中的数据被格式化为comme:

代码语言:javascript
运行
复制
{
    "id": 1,
    "data": {"id": "1", "title": "title of id 1", "foo": "bar"}
}

现在,当您遍历每个数据块(其中json_array是完整的json)时:

代码语言:javascript
运行
复制
for json_block in json_array:
    temp = json_block['data']
    title = (temp['title'])

或者:

代码语言:javascript
运行
复制
for json_block in json_array:
    title= json_block['data']['title']

现在您可以轻松地将每个标题添加到一个新数组中:

代码语言:javascript
运行
复制
    index_list.append({'id': title})

整个方法如下所示:

代码语言:javascript
运行
复制
def create_new_json():
    index_list = []
    for json_block in json_array:
        index_list.append({json_block ['id']: json_block ['data']['title']})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51729627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档