【问题标题】:Python - Parse a string of lists of dictionariesPython - 解析一串字典列表
【发布时间】:2017-03-18 22:17:06
【问题描述】:

http://pastebin.com/tcpmYiMz

在上面的链接中,我有一个我在解析网站时收到的数据示例,采用字符串形式。它本质上是一个字典列表,里面有更小的字典。

我希望能够解析这些数据,最好使用 JSON。如何将此字符串转换为列表,然后将该列表中的每个字典转换为 json?

我尝试过使用常规列表解析,但我认为它会完全混淆字典中的所有逗号。

原始数据组织得不好。它是一个长时间运行的字符串,没有制表符或空格。

谢谢!

【问题讨论】:

  • 我将该结构复制到 jsonlint 中,但它没有作为有效的 json 结构出现。但是,您应该查看 json 模块来执行这项工作。
  • 是的,数据实际上是一个字典列表。如果它以 [ 开头并以 ] 结尾,它将是一个列表。但是,当我尝试将其解析为列表时,它不起作用,因为字典中的字典

标签: python string list dictionary converter


【解决方案1】:

你可以这样做:

import ast
my_obj = ast.literal_eval('[' + d.replace('false', 'False') + ']')

print(type(my_obj))
# prints: <class 'list'>

print(len(my_obj))
# prints: 4

假设您在发布的链接中获得字符串输入,则会添加列表括号,因为其中的数据结构不是有效的 Python。然后,您需要使 Python 布尔值正确。您可能也想为True 这样做。

【讨论】:

    【解决方案2】:

    我有一个解决方案,但它很乱。如果有人有更好的方法,请告诉我,我担心这会因对字符串的简单更改而中断。

    a = '{"skuAttr"'
        b = d.split(a)
        x=0
        for g in b:
            if x != 0:
                if (g[-1] == ","):
                    g = g[:-1]
    
                print json.loads(('{"skuAttr"' + g))
            x+=1
    

    基本上,它只是用我发现的第一个字符拆分字符串,然后在最后添加它们,如果存在逗号,则删除逗号,然后分别加载每个字典。效率低下且不抗改变,但它现在可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多