Convert Python dictionary to JSON array

前端 未结 4 1215
时光取名叫无心
时光取名叫无心 2020-12-04 15:56

Currently I have this dictionary, printed using pprint:

{\'AlarmExTempHum\': \'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\',  
\'AlarmIn\': 0,           


        
相关标签:
4条回答
  • One possible solution that I use is to use python3. It seems to solve many utf issues.

    Sorry for the late answer, but it may help people in the future.

    For example,

    #!/usr/bin/env python3
    import json
    # your code follows
    
    0 讨论(0)
  • 2020-12-04 16:33

    If you use Python 2, don't forget to add the UTF-8 file encoding comment on the first line of your script.

    # -*- coding: UTF-8 -*-
    

    This will fix some Unicode problems and make your life easier.

    0 讨论(0)
  • 2020-12-04 16:48

    ensure_ascii=False really only defers the issue to the decoding stage:

    >>> dict2 = {'LeafTemps': '\xff\xff\xff\xff',}
    >>> json1 = json.dumps(dict2, ensure_ascii=False)
    >>> print(json1)
    {"LeafTemps": "����"}
    >>> json.loads(json1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/json/__init__.py", line 328, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode
        obj, end = self.scan_once(s, idx)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
    

    Ultimately you can't store raw bytes in a JSON document, so you'll want to use some means of unambiguously encoding a sequence of arbitrary bytes as an ASCII string - such as base64.

    >>> import json
    >>> from base64 import b64encode, b64decode
    >>> my_dict = {'LeafTemps': '\xff\xff\xff\xff',} 
    >>> my_dict['LeafTemps'] = b64encode(my_dict['LeafTemps'])
    >>> json.dumps(my_dict)
    '{"LeafTemps": "/////w=="}'
    >>> json.loads(json.dumps(my_dict))
    {u'LeafTemps': u'/////w=='}
    >>> new_dict = json.loads(json.dumps(my_dict))
    >>> new_dict['LeafTemps'] = b64decode(new_dict['LeafTemps'])
    >>> print new_dict
    {u'LeafTemps': '\xff\xff\xff\xff'}
    
    0 讨论(0)
  • 2020-12-04 16:49

    If you are fine with non-printable symbols in your json, then add ensure_ascii=False to dumps call.

    >>> json.dumps(your_data, ensure_ascii=False)
    

    If ensure_ascii is false, then the return value will be a unicode instance subject to normal Python str to unicode coercion rules instead of being escaped to an ASCII str.

    0 讨论(0)
提交回复
热议问题