文档章节

Python解析json字符串

buglife
 buglife
发布于 2014/10/29 01:02
字数 311
阅读 7201
收藏 5

问题分析

解析一个json字符串并将其所以key和value提取出来置于list当众,首先不得不对json的格式进行分析,以下则是个人的一个分析过程:

源码

def read(obj,key):
    collect = list()
    for k in obj:
        v = obj[k]
        if isinstance(v,dict):
            collect.extend(read(v,k))
        elif isinstance(v,list):
            if key=='':
                collect.extend(readList(v,k))
            else:
                collect.extend(readList(v,key+"."+k))
        else:
            if key=='':
                collect.append({k:v})
            else:
                collect.append({str(key)+"."+k:v})
    return collect
    
def readList(obj,key):
    collect = list()
    for index,item in enumerate(obj):
        for k in item:
            v = item[k]
            if isinstance(v,dict):
                collect.extend(read(v,key+"["+str(index)+"]"))
            elif isinstance(v,list):
                collect.extend(readList(v,key+"["+str(index)+"]"))
            else:
                collect.append({key+"["+str(index)+"]"+"."+k:v})
    return collect

示例

import json

jsonStr = '{"num":1,"boo":true,"obj":{"sex":"boy","age":20},"result":[{"name":"saas","leverl":[{"name":"english","mark":99}],"id":"336efba7-259d-4057-ae1e-679e81419cd7","module":"life"}]}'

ojt = json.loads(jsonStr)
print read(ojt,'')

#输出结果
[{u'num': 1}, {u'obj.age': 20}, {u'obj.sex': u'boy'}, {u'[0].module': u'life'}, {u'[0].name': u'saas'}, {u'[0][0].name': u'english'}, {u'[0][0].mark': 99}, {u'[0].id': u'336efba7-259d-4057-ae1e-679e81419cd7'}, {u'boo': True}]


© 著作权归作者所有

buglife

buglife

粉丝 81
博文 126
码字总数 44248
作品 4
浦东
架构师
私信 提问
Python入门(十二) Json模块的使用

至于Json是什么,可以在网上搜一下就知道。 现在的网络开发中,很多时候数据的传递都是采用Json格式。相比于XML,Json在传递同样的数据量的前提下,比XML减少大概30%的空间。先看一个最简单的...

kaedehao
2015/08/16
0
0
数据提取之JSON与JsonPATH

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的...

张元江_erel
2018/11/28
0
0
列表--元组--字典--import join

--9-----------Python 列表 list-----------用[]标识----------------------------------------------------------------------------------------------- List(列表) 是 Python 中使用最频......

liapple6
2018/10/28
0
0
ValueError: Expecting property name enclosed in do

在python中提供了json包来方便快捷的解析json字串的转换过程,但是碰到了一个比较奇怪的问题,就是不太正确的json串会报这个错,那么应该如何解析? 主要是因为某个字段没有相应的引号来包装...

wenguonideshou
2018/07/26
0
0
用了这个几个Python内置小工具,可以让你的工作效率提升一倍

我们将会介绍4个Python解释器自身提供的小工具。 这些小工具在笔者的日常工作中经常用到, 减少了各种时间的浪费, 然而,却很容易被大家忽略。 每当有新来的同事看到我这么使用时, 都忍不住...

Python新世界
2018/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

10分钟详解Spring全家桶7大知识点

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!! Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spr...

我最喜欢三大框架
26分钟前
5
0
注册服务&开机自启动

列出所有服务[root@localhost ~]# systemctl list-unit-files[root@localhost ~]# systemctl status mysqld[root@localhost ~]# systemctl stop mysqld[root@localhost ~]# ......

jxlgzwh
29分钟前
1
0
解决jdk8 stream tomap方法报错:java.lang.IllegalStateException: Duplicate key异常解决(key重复)

List<User> userList = User.ME.loadList(users); if (CollectionUtils.isNotEmpty(userList)) { Map<Long, User> userMap = userList.stream().filter(Objects::nonN......

冰峰雪座
38分钟前
1
0
jdk中的一些命令

jdk中的一些命令 jps jstack jmap jstat jhat jinfo javap http://www.importnew.com/18398.html

晨猫
39分钟前
1
0
Bystack的高TPS共识算法

共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工作量证明)和POS(权益证明)两大类。第一类POW模式是在公链项目中运用的最广泛应用的共识算法,比特币长达10年...

比原链Bytom
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部