Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python+;json:解析到列表_Python_Json_List_Parsing - Fatal编程技术网

python+;json:解析到列表

python+;json:解析到列表,python,json,list,parsing,Python,Json,List,Parsing,我对用python(使用python 2.7)解析JSON数据有些陌生。我必须向一个服务发送API调用,JSON响应与下面的类似。“行”中的项目数量可能会有所不同。我需要做的是,如果有第二行,只从第二行获取“内容”,并将其放入列表中。从本质上讲,它只是一个“竞选确认号”列表,没有其他内容。如果有帮助的话,数字也总是只有9个数字。如有任何建议,将不胜感激 {"response": {"result": {"Potentials": {"row":

我对用python(使用python 2.7)解析JSON数据有些陌生。我必须向一个服务发送API调用,JSON响应与下面的类似。“行”中的项目数量可能会有所不同。我需要做的是,如果有第二行,只从第二行获取“内容”,并将其放入列表中。从本质上讲,它只是一个“竞选确认号”列表,没有其他内容。如果有帮助的话,数字也总是只有9个数字。如有任何建议,将不胜感激

{"response":
    {"result":
        {"Potentials":
            {"row":
                [
                {"no":"1","FL":
                    {"content":"523836000004148171","val":"POTENTIALID"}
                },
                {"no":"2","FL":
                    {"content":"523836000004924051","val":"POTENTIALID"}
                },
                {"no":"3","FL":
                    [
                    {"content":"523836000005318448","val":"POTENTIALID"},
                    {"content":"694275295","val":"Campaign Confirmation Number"}
                    ]
                },
                {"no":"4","FL":
                    [
                    {"content":"523836000005318662","val":"POTENTIALID"},
                    {"content":"729545274","val":"Campaign Confirmation Number"}
                    ]
                },
                {"no":"5","FL":
                    [
                    {"content":"523836000005318663","val":"POTENTIALID"},
                    {"content":"903187021","val":"Campaign Confirmation Number"}
                    ]
                },
                {"no":"6","FL":
                    {"content":"523836000005322387","val":"POTENTIALID"}
                },
                {"no":"7","FL":
                    [
                    {"content":"523836000005332558","val":"POTENTIALID"},
                    {"content":"729416761","val":"Campaign Confirmation Number"}
                    ]
                }
                ]
            }
        },
    "uri":"/crm/private/json/Potentials/getSearchRecords"}
}
编辑:此示例的输出示例如下:

confs=[69427529572954527490187021729416761]

confs=['694275295','729545274','903187021','729416761']

它们是否存储为字符串或整数并不重要

编辑2:这是我的代码剪辑:

import urllib
import urllib2
import datetime
import json

key = '[removed]'

params = {
    '[removed]'
    }

final_URL = 'https://[removed]'
data = urllib.urlencode(params)
request = urllib2.Request(final_URL,data)
response = urllib2.urlopen(request)
content = response.read()

j = json.load(content)

confs = []
for no in j["response"]["result"]["Potentials"]["row"]:
    data = no["FL"]
    if isinstance(data, list) and len(data) > 1:
        confs.append(int(data[1]["content"]))

print confs

假设
j
是您的JSON对象,上面的结构已解析为:

>>> results = []
>>> for no in j["response"]["result"]["Potentials"]["row"]:
...     data = no["FL"]
...     if isinstance(data, list) and len(data) > 1:
...         results.append(int(data[1]["content"]))
...
>>> results
[694275295, 729545274, 903187021, 729416761]

假设“response”包含json字符串:

import json

data = json.loads(response)
rows = data['response']['result']['Potentials']['rows']
output = []
for row in rows:
    contents = row['FL']
    if len(contents) > 1:
        output.append(contents[1]['content'])
应该这样做

编辑:

我终于有时间来测试这个“一行”。使用Python的功能特性很有趣:

import json

#initialize response to your string
data = json.loads(response)
rows = data['response']['result']['Potentials']['row']
output = [x['FL'][1]['content'] for x in rows if isinstance(x['FL'], list) and len(x['FL']) > 1]
print output

['694275295', '729545274', '903187021', '729416761']

您可以根据此示例添加所需输出的示例吗?刚刚添加的示例看起来我遇到了一个错误:AttributeError:'str'对象没有属性'read'。我已将代码片段添加到我的帖子中。@user3126085:您首先需要使用
JSON.load()
(从文件中)或
JSON.load()
(从字符串中)解析保存JSON信息的字符串。@user3126085:您需要使用
JSON.load()
,正如我上面所写的。不
load()
,因为这只适用于文件对象。我的错。固定,工作完美!非常感谢你!我注意到的一件事是,如果有重复的值,它会将所有值都存储在末尾,并在末尾加上一个“L”。我检查了原始JSON响应,它们在那里很好。你知道怎么修吗?下面是一个例子:[69427529572954527455915342892L,5915342892L]。。。编辑将append更改为字符串会去掉“L”,因为如果只有一个元素,它不会包含在列表中,因此
len()
也会返回
2
,因为字典中有两个项。