使用python从列表中提取json对象

时间:2018-02-03 02:10:47

标签: python json apache-spark spark-dataframe

我有一个字符串类型列,其中包含嵌套字典对象的元素列表。 E.g

str = '[{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["nyc","atlanta"],
"description":"some description",
"content_type":"media"},
{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["chicago","dallas"],
"description":"some description2",
"content_type":"web"},
{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["las vegas","buffalo"],
"description":"some description3",
"content_type":"media"}]'

这实际上是一个火花数据帧中的一个列,它是一个字符串类型。所以我想知道如何将字符串的内容转换为列表,以便我可以使用json.loads转换列表中的每个元素。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

json.loads应该可以正常使用这些数据 - 它将返回一个dicts列表。

答案 1 :(得分:1)

import json
msg = '''[{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["nyc","atlanta"],
"description":"some description",
"content_type":"media"},
{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["chicago","dallas"],
"description":"some description2",
"content_type":"web"},
{"method":
{"super":0.03,"normal":0.8,"par":0.15,"goal":0.01,"fact":0.04},
"city":["las vegas","buffalo"],
"description":"some description3",
"content_type":"media"}]'''
json.loads(msg)[0]



 out:
{'city': ['nyc', 'atlanta'],
 'content_type': 'media',
 'description': 'some description',
 'method': {'fact': 0.04,
  'goal': 0.01,
  'normal': 0.8,
  'par': 0.15,
  'super': 0.03}}

答案 2 :(得分:-1)

有几个步骤可以解决这个问题,我希望json.loads是您完成后甚至需要的。 如果您按照这些步骤操作,您的字符串将转换为字典列表(并且几乎不需要json.loads)

第一步,删除括号" []"从字符串 假设您将字符串设置为变量" value"运行这些行:

value = value[1:]
value = value[:-1]

接下来,我们将准备使用pythons .split()函数,它将任何字符串转换为列表,方法是将它与您选择的任何字符分开。 问题是,你的字符串中有两个级别的逗号。一个在列表之间,另一个在字典值之间。 所以在我们分割线之前,让我们把你的列表的逗号变成半颜色,这样我们的split函数就可以将字符串吐出到适当的位置。使用此代码:

value = value.replace('},','};') 

最后,使用此代码将字符串拆分为列表     value = value.split(&#39 ;;')

如果这对您有用,请告诉我 古德勒克