【问题标题】:How to read a JSON root array into a list?如何将 JSON 根数组读入列表?
【发布时间】:2020-08-25 18:44:54
【问题描述】:

我有一个包含 JSON 数组的字符串:

s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"

我尝试将其解析为 JSON:

import json
l = json.loads(s)

我除了要获取一个列表,但已经引发了一个异常:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/xx/anaconda3/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/home/xx/anaconda3/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/home/xx/anaconda3/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)

我不确定这里会发生什么。

【问题讨论】:

  • 您的字符串不是有效的 json。这有效:s2 = s.replace("\'", "\""); l = json.loads(s2)

标签: python json string list


【解决方案1】:

使用ast.literal_eval:

>>> from ast import literal_eval 
>>> s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"
>>> literal_eval(s)
['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']

【讨论】:

  • 谢谢。比解析为json之前替换字符串中的字符更优雅。
【解决方案2】:

Json 标准需要双引号,它不支持单引号。 这就是你得到错误的原因

因此,字符串应该是

s = '["GY2_CAMP1", "GY2_CAMP2", "GY2_CAMP3", "GY2_CAMP4", "GY2_CAMP5"]'

然后你得到预期的行为

import json
l = json.loads(s)
print(l)
>> ['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']

【讨论】:

    【解决方案3】:

    先将'替换为",然后加载。

    import json
    s = "['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']"
    s.replace("'", "\"")
    
    l = json.loads(s1)
    print(l)
    

    会得到

    ['GY2_CAMP1', 'GY2_CAMP2', 'GY2_CAMP3', 'GY2_CAMP4', 'GY2_CAMP5']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 2021-09-29
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多