如何处理 JSON 响应

Posted

技术标签:

【中文标题】如何处理 JSON 响应【英文标题】:how to deal with JSON response 【发布时间】:2015-02-03 13:24:30 【问题描述】:

我正在使用 Python websockets 来返回 JSON 对象(我认为)但是我不确定如何处理响应。我有一个使用 parseJSON 的 javascript 示例,下面是一个 sn-p:

socket = io.connect("__socket address__");
socket.on("connect", function() socket.emit("subscribe_areas", areas));
var d = jQuery.parseJSON(c);
console.log(d);
d.type == "INTERPOSE";

返回我可以访问的数据,例如 d.type == "INTERPOSE";:

Object area: "BE", type: "MOVE", to: "0109", from: "0107", value: "2L65"
Object area: "BE", type: "MOVE", to: "0113", from: "0109", value: "2L65"

作为我的 Python,我在哪里收到:

(u'"area":"EH","type":"INTERPOSE","to":"B243","value":""',)
(u'"area":"EH","type":"INTERPOSE","to":"0337","value":""',)
(u'"area":"EH","type":"INTERPOSE","to":"0085","value":""',)

为什么 python 返回 JSON 包裹在括号和逗号中?我的 Python 如下:

from socketIO_client import SocketIO
import logging
import json
def on_connect():
    print('CONNECTED')
    areas = ['EH']
    socketIO.emit('subscribe_areas', areas)
def on_message(*answer):
    print(answer)
socketIO = SocketIO('_address_', _port_)
socketIO.on('connect', on_connect)
socketIO.on('message', on_message)
socketIO.wait()

我尝试使用 json.load、json.loads、json.decode 进行解码,但收到各种错误。我错过了什么,为什么返回包裹在括号等中?

【问题讨论】:

【参考方案1】:

您告诉 Python 期望 0 个或更多参数:

def on_message(*answer):
    print(answer)

Python 然后给你一个包含所有传入参数的元组;你的打印语句显示你有一个参数,所以你有一个只有一个元素的元组。该元素是一个 JSON 字符串,您可以使用 json.loads() 对其进行解码。

获取第一个元素并对其进行解码:

def on_message(*answer):
    print(json.loads(answer[0]))

或不使用* 并要求始终传入一个参数并从该参数加载

def on_message(answer):
    print(json.loads(answer))

【讨论】:

以上是关于如何处理 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何处理完全动态的 JSON 响应

如何处理大 JSON 响应

如何处理android中reddit api的深层嵌套json响应?

如何处理反序列化变化的 JSON 数据?

如何处理特定的 json 文件以获得数据框

改造2如何处理有时无效有时非无效的服务器响应