初学者Python编码器,这个问题对我来说似乎很简单,但我花了好几个小时试图解决这个问题。
我正在尝试解析以下JSON以简单地检索' time'和'出价/价格'
{
"prices": [
{
"type": "PRICE",
"time": "2017-05-26T02:21:25.603280035Z",
"bids": [
{
"price": "1.34939",
"liquidity": 10000000
}
],
"asks": [
{
"price": "1.34956",
"liquidity": 10000000
}
],
"closeoutBid": "1.34939",
"closeoutAsk": "1.34956",
"status": "tradeable",
"tradeable": true,
"unitsAvailable": {
"default": {
"long": "33",
"short": "33"
},
"openOnly": {
"long": "33",
"short": "33"
},
"reduceFirst": {
"long": "33",
"short": "33"
},
"reduceOnly": {
"long": "0",
"short": "0"
}
},
"quoteHomeConversionFactors": {
"positiveUnits": "1.00000000",
"negativeUnits": "1.00000000"
},
"instrument": "USD_CAD"
}
]
}
我使用了多种代码变体而没有结果。 这是我的最新消息:
import json
import pandas as pd
import oandapyV20
from oandapyV20 import API
import oandapyV20.endpoints.pricing as pricing
import logging
from datetime import datetime
logging.basicConfig(filename="v20.log", level=logging.INFO, format='%
(asctime)s [%(levelname)s] %(name)s : %(message)s',)
accountID =
access_token =
api = API(access_token = access_token, environment = "live")
params = {"instruments": "USD_CAD"}
r= pricing.PricingInfo(accountID=accountID,params=params)
rv = api.request(r)
json_str = json.dumps(rv, indent=4)
new_json_str = json_str(["prices"])
print(new_json_str)
我收到以下错误:TypeError:' str'对象不可调用
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
好的,看起来price对象就是一个对象列表。
所以你必须这样做
jsonVar["prices"][0]["time"]
jsonVar["prices"][0]["bids"]["price"]
如果有多个价格退回,您可以获得以下所有信息:
for each priceObject in jsonVar["prices"]:
print priceObject["time"]
print priceObject["bids"]["price"]
答案 1 :(得分:0)
json.dumps
接受一个python对象并将其序列化为有效json格式的字符串(即,它不再是可以再使用的对象,它是一个字符串)。看看你目前在代码中做了什么,看起来rv
已经是你的第一个代码片段中给出的结构中的python对象了?
如果rv
是一个python对象,那么你可以直接使用它来获取值,而不必担心json。例如:rv['prices'][0]['time']
来检索给定结构的时间。
但是,如果api返回格式为json的字符串,则rv
将是一个字符串,必须首先解析为json。例如:
json_data = json.loads(rv)
time = json_data['prices'][0]['time']
为了帮助调试,请尝试打印type(rv)
以查看它是字符串还是python字典。