• json和python字典的转换


    一般的py用这个就可以

      # coding: utf-8

      import sys
      reload(sys)
      sys.setdefaultencoding('utf8')

     爬虫用这个

    # coding: utf-8       这个也得加,他是管理注释的,后面的是管理爬虫的东西

    import sys
    from billiard.five import reload     ######这个注意
    reload(sys)
    sys.setdefaultencoding( "utf-8" )

    在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换。

    在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换。

    示例代码如下:

    1.  
      #!/usr/bin/python3
    2.  
      from json import *
    3.  
      if __name__=="__main__":
    4.  
      d={}
    5.  
      d['a'] =1
    6.  
      d['b']=2
    7.  
      d[3]='c'
    8.  
      d[4]=['k','k1']
    9.  
      #将Python dict类型转换成标准Json字符串
    10.  
      k=JSONEncoder().encode(d)
    11.  
      print(type(k))
    12.  
      print(k)
    13.  
      #将json字符串转换成Python dict类型
    14.  
      json_str='{"a":1,"b":2,"3":"c","4":["k","k1"]}'
    15.  
      d=JSONDecoder().decode(json_str)
    16.  
      print(type(d))
    17.  
      print(d)

    运行截图:

    需要注意的是:标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会提示出错。

    以上代码在Windows下python 3.3下运行通过。

    总结,  将Python 的dict类型转换成标准Json字符串用 encode()     还有用 json.dump() 

        

        def encode(self, o):
        """Return a JSON string representation of a Python data structure.

        >>> from json.encoder import JSONEncoder
        >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
        '{"foo": ["bar", "baz"]}'

        """

      反之用loads是()和 decode()

    ------ 

    1、编码解码是怎么一回事?

    Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。

    编码是 unicode -> str,相反的,解码就是 str -> unicode。

    str形式,也就是字符串形式都是以一定的编码格式存在的,常见的编码格式有utf-8、ASCII、gb2312等等。

    str1.decode(‘gb2312’),表示将gb2312编码的字符串str1解码成unicode。

    str2.encode(‘utf-8’),表示将unicode字符串str2转换成用utf-8格式编码的字符串。

    不同编码格式的字符串之间相互转换编码格式的话,都要先解码成unicode,再编码成其他编码格式的字符串。就拿上面的str1来说,将str1转成utf-8编码的字符串,需要这么做: 
    str1.decode(‘gb2312’).encode(‘utf-8’)

    request.data获取到的是byte字节,byte有decode()方法, 但是如果获取到的是b '' ,空字节,那么用 request.data.decode("utf-8"))  ,会报如下错误  

        raise JSONDecodeError("Expecting value", s, err.value) from None
        json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    str有encode(),转换为byte字节

        

    >>> website = 'http://www.cnblogs.com/txw1958/'
    >>> type(website)
    <class 'str'>
    >>> website
    'http://www.cnblogs.com/txw1958/'
    >>>
    复制代码

    按utf-8的方式编码,转成bytes

    复制代码
    >>> website_bytes_utf8 = website.encode(encoding="utf-8")
    >>> type(website_bytes_utf8)
    <class 'bytes'>
    >>> website_bytes_utf8
    b'http://www.cnblogs.com/txw1958/'
  • 相关阅读:
    ipython notebook
    使用gevent多线程下载豆瓣音乐 李少宏 博客园
    牛人
    Lucene中对document(记录)的CURD操作~为分布式全文检索设计
    DDD领域驱动设计(Domain Driven Design)(转)
    LINQtoSQL那点事~线程共享的DbContext与私有的DbContext
    LINQtoSQL那点事~LINQtoSQL中的数据缓存与应对
    分布式中的DTO(转)
    php处理checkbox
    filter_var()函数解释
  • 原文地址:https://www.cnblogs.com/ithairy/p/9272026.html
Copyright © 2020-2023  润新知