【问题标题】:Python Json to arrayPython Json 到数组
【发布时间】:2016-09-07 15:23:28
【问题描述】:

我想将 json 放入数组中。 我有 6 个 Json 链接(大小相同但问题不同)

这是我的尝试:

data=('0','0')
response = urllib.urlopen(URL)
data[0] = json.loads(response.read())
response = urllib.urlopen(URL)
data[1] = json.loads(response.read())

我必须初始化一个 3d 数组吗? 以后如果我能处理这样的结果就好了:

result = data[0]['resu']['spc']

最后我想构建一个使用动态 json 链接的 for 循环:

for w in range(0,len(URLs)):
    URLs[w]['resu']['spc']

【问题讨论】:

  • data 是一个不能修改的元组。
  • 这意味着不可能?
  • 不 - 您必须改用列表:它可以与 data=[0,0] 一起使用,但请参阅我的答案以获得更好的解决方案

标签: python arrays json


【解决方案1】:

我强烈建议使用requests(当前文档也这样做),但您可以这样做:

import json
import urllib2

urls=["http://example.com/json","https://example.com/json2"] # your urls here

data=[]
for u in urls:
    response = urllib2.urlopen(u)
    data.append(json.loads(response.read())) # while this normally works with Python 2, it is better to use data.append(json.loads(response.read().decode("utf8"))

为此,您必须找出/猜测您的响应的编码。

使用请求会简单得多:

import requests

urls=["http://example.com/json","https://example.com/json2"] # your urls here
data=[requests.get(u).json() for u in urls]

【讨论】:

  • 我也有同样的想法,但是在每个循环中转换一个 json url 的性能还不错吗?
  • 我不确定我是否理解正确,但是(除了在我的第二个代码示例中使用追加而不是列表理解之外)没有太大的性能改进空间 - 如果有多个网址,那么循环实际上是除了map 之外的唯一解决方案
【解决方案2】:

元组是不可变的,这使得它们非常适合在线程之间共享,但不适合频繁更改。尝试使用列表,因为它们是为这个用例设计的。话虽如此,字典也可以很好:

import json
import urllib.request

data = {}
for url in urls:
    with urllib.request.urlopen(url) as response:
        if response.status_code != 200: 
            continue // Handle errors here, I chose to continue
        // Remember that JSON must be in text format
        data[url] = json.loads(response.read().decode())

只是为了咯咯笑,这里是一个班轮:

// The lack of error checking in this is staggering though!
data = {u:json.loads(urllib.request.urlopen(u).read().decode()) for u in urls}

【讨论】:

  • 好的,这意味着我可以用我的所有数据构建一个数组,以便动态地使用它们。这可能是一个解决方案。我会试试的
  • 如果不检查标头,您实际上无法确定采用哪种编码进行解码。仅使用带有.decode() 的默认编码可能不是最好的主意。 utf-8 会是一个更好的猜测 -> .decode("utf-8")
  • 默认编码为utf-8。
猜你喜欢
  • 2018-10-16
  • 2017-05-19
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多