我正在使用以这种格式输出数据的模块:
j = ("{u'auth_user': {u'first_name': u'a', u'last_name': u'b', u'uid': u'x', u'timezone_offset': u'7200', u'timezone': u'Europe', u'mail': u'x'}, u'server_time': 1390844912, u'table': {u'rows': [{u'c': [{u'v': u'20140126'}, {u'v': u'-35.9'}]}, {u'c': [{u'v': u'20140115'}, {u'v': u'-37.02'}]}, {u'c': [{u'v': u'20131222'}, {u'v': u'-48.1'}]}, {u'c': [{u'v': u'20131213'}, {u'v': u'-53.28'}]}, {u'c': [{u'v': u'20131209'}, {u'v': u'-26.8'}]}, {u'c': [{u'v': u'20131203'}, {u'v': u'-12.36'}]}], u'cols': [{u'type': u'date', u'label': u'date'}, {u'type': u'number', u'label': u'amount'}]}}")
我想从这些数据中提取负值。
我认为这是json,但我猜它可能无效。
我无法解析它。
json.loads(j)
返回:
ValueError: Expecting property name: line 1 column 2 (char 1)
我该如何处理解析这些数据?如何从中提取负值?
答案 0 :(得分:4)
它不是有效的JSON。如果有人发送给你声称它是JSON,你可以用棍子打它们。
这是一个有效的python dict文字,所以你可以使用:
import ast
ast.literal_eval(j)
答案 1 :(得分:0)
正如wim所说,你可以使用ast.literal_eval来提取它们,因为它是有效的python literal
import ast
l = ast.literal_eval(j)
第二部分很有趣,因为你可以打印json以查看模式
import pprint
pprint.pprint(l)
{u'auth_user': {u'first_name': u'a',
u'last_name': u'b',
u'mail': u'x',
u'timezone': u'Europe',
u'timezone_offset': u'7200',
u'uid': u'x'},
u'server_time': 1390844912,
u'table': {u'cols': [{u'label': u'date', u'type': u'date'},
{u'label': u'amount', u'type': u'number'}],
u'rows': [{u'c': [{u'v': u'20140126'}, {u'v': u'-35.9'}]},
{u'c': [{u'v': u'20140115'}, {u'v': u'-37.02'}]},
{u'c': [{u'v': u'20131222'}, {u'v': u'-48.1'}]},
{u'c': [{u'v': u'20131213'}, {u'v': u'-53.28'}]},
{u'c': [{u'v': u'20131209'}, {u'v': u'-26.8'}]},
{u'c': [{u'v': u'20131203'}, {u'v': u'-12.36'}]}]}}
负值都在同一个地方,因此可以提取
print([cell[u'c'][1][u'v'] for cell in l[u'table'][u'rows']])
[u'-35.9', u'-37.02', u'-48.1', u'-53.28', u'-26.8', u'-12.36']