• python json dumps与loads有可能犯的错误


    json.dumps() 是将一个Python数据结构转换为一个JSON编码的字符串
    json.loads() 是将一个JSON编码的字符串转换为一个Python数据结构
     
     
    如下:
    >>> import json
    >>> a={'name':'xiaoming'}
    >>> json.dumps(a)
    '{"name": "xiaoming"}'
    >>> b='{"name": "xiaoming"}'
    >>> json.loads(b)
    {u'name': u'xiaoming'}
     
     
    注意:我们原先定义a的元素都是用单引号,而dumps转化后都变成了双引号,而在loads后变成python变量时,元素都变成了单引号,并且字符串前加多了个u。
     
    那么当我定义如下的字符串类型时,元素内容用单引号,而整个字符串用双引号括起来:
    >>> c="{'name':'xiaoming'}"
    >>> print json.loads(c)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
    File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
    ValueError: Expecting property name: line 1 column 2 (char 1)
     
    程序报错了,所以一般要求当要字符串通过loads转为python数据类型时,得外层用单引号,里面元素key和value用双引号
     
    还有,即使满足上述条件,当有u前缀的unicode出现修饰时,也会报错:
    >>> c='{u"name": u"xiaoming"}'
    >>> json.loads(c)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
    File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
    ValueError: Expecting property name: line 1 column 2 (char 1)
     
    所以loads在处理中,还需要把里面的u前缀修饰符去掉
     
     
     
     
     https://stackoverflow.com/questions/25707558/json-valueerror-expecting-property-name-line-1-column-2-char-1
     
     
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • 相关阅读:
    WCF如何通过契约加编码方式调用
    编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里
    MSMQ消息队列
    使用windows服务和MSMQ和进行日志管理(解决高并发问题)
    二叉树的三种遍历方式
    go语言的3个包——strconv、os.Args、flag
    公钥、私钥、签名、数字证书的关系
    go语言实现单链表
    Go语言学习笔记(10)——错误处理示例
    go语言实现链式栈
  • 原文地址:https://www.cnblogs.com/zejin2008/p/6816289.html
Copyright © 2020-2023  润新知