zoukankan      html  css  js  c++  java
  • 用python解析JSON

    先来认识下JSON


    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    简单点说,设计JSON这种格式,主要是为了方便数据交换

    引用模块


    import json
    

    基本操作


    • 编码:把一个python对象编码转换成一个json字符串json.dumps()
    • 解码:把一个json字符串转换成一个python对象json.loads()

    转化表


    1.Python->JSON

    Python JSON
    dict object
    list,tuple array
    str,unicode string
    int,long,float number
    True true
    False false
    None null

    2.JSON->Python

    JSON Python
    object dict
    array list
    string unicode
    number(int) int,long
    number(float) float
    true True
    false False

    json.dumps()


    1.编码,该方法返回了一个str对象encodedjson

    >>> import json
    >>> dict={"a":1,"b":2,"c":{"d":3,"e":(4,5)}}
    >>> type(dict)
    <type 'dict'>
    >>> s=json.dumps(dict)
    >>> type(s)
    <type 'str'>
    >>> print s
    {"a": 1, "c": {"e": [4, 5], "d": 3}, "b": 2}
    

    2.json.dumps方法还提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separatorsindent等参数。

    sort_keys

    >>> data1 = {'b':789,'c':456,'a':123}
    >>> data2 = {'a':123,'b':789,'c':456}
    >>> d1=json.dumps(data1,sort_keys=True)
    >>> d2=json.dumps(data2,sort_keys=True)
    >>> d3=json.dumps(data2)
    >>> print d1
    {"a": 123, "b": 789, "c": 456}
    >>> print d2
    {"a": 123, "b": 789, "c": 456}
    >>> print d3
    {"a": 123, "c": 456, "b": 789}
    >>> print d1==d2
    True
    >>> print d1==d3
    False
    

    indent参数是缩进的意思,可以使得数据存储的格式变得更加优雅

    >>> data1 = {'b':789,'c':456,'a':123}
    >>> d1=json.dumps(data1,sort_keys=True,indent=3)
    >>> print d1
    {
       "a": 123,
       "b": 789,
       "c": 456
    }
    

    separator参数可以移除多余的空白符,来达到数据压缩的目的。该参数传递是一个元组,包含分割对象的字符串。

    >>> data1 = {'b':789,'c':456,'a':123}
    >>> len(data1)
    3
    >>> len(repr(data1))
    30
    >>> len(json.dumps(data1))
    30
    >>> len(json.dumps(data1,indent=2))
    40
    >>> len(json.dumps(data1,separators=(',',':')))
    25
    

    注意:
    1.separators = (',', ':')为固定,是理想的分割结果
    2.str()一般是将数值转成字符串。
    repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。

    >>> a = 'hello'
    >>> a
    'hello'
    >>> repr(a)
    "'hello'"
    >>> print repr(a)
    'hello'
    >>> str(a)
    'hello'
    >>> print str(a)
    hello
    
    

    json.loads()


    解码

    >>> data1 = {'b':789,'c':456,'a':123}
    >>> s=json.dumps(data1)
    >>> type(s)
    <type 'str'>
    >>> s1=json.loads(s)
    >>> type(s1)
    <type 'dict'>
    >>> print s1
    {u'a': 123, u'c': 456, u'b': 789}
    >>> print s
    {"a": 123, "c": 456, "b": 789}
    >>> print s1['a']
    123
    

    注:loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘a’转化为了unicode类型。

    参考


    Python官方文档
    Json概述以及python对json的相关操作

    暂时就这么多了,之后还会更新有关python的内容=_=

  • 相关阅读:
    【Spring注解驱动开发】你了解@PostConstruct注解和@PreDestroy注解吗?
    【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?
    【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!
    【分布式事务】如何基于消息中间件实现分布式事务?万字长文给你答案!!
    【K8S】Kubernetes中暴露外部IP地址来访问集群中的应用
    【K8S】Service服务详解,看这一篇就够了!!
    【Spring注解驱动开发】面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?
    【K8S】如何进入kubernetes的一个pod
    这是对我最大的认可和鼓励
    我的价值观
  • 原文地址:https://www.cnblogs.com/dockerchen/p/6565323.html
Copyright © 2011-2022 走看看