具有来自API的JSON响应,该API的输出有些奇怪,无法解析。这是响应:
2: 40822: 42["contest", {
"start_time": 1545638460000,
"show_time": 1545638400000,
"start_after": 0,
"show_time_after": 0,
"uid": "YDDZZKJWPR",
"stream_start_at": -1,
"stream_start_after": 0,
"user_status": "10"
}] 631: 42["choiceq", {
"uid": "YDDZZKJWPR",
"text": "Select a color of your choice !",
"question_type": "normal-question",
"options": [{
"uid": "FLEL6CL9MS",
"text": "Blue",
"rank": 2
}, {
"uid": "HXZRYDTRP9",
"text": "Green",
"rank": 1
}, {
"uid": "VGC3URSDU1",
"text": "Red",
"rank": 0
}],
"server_time": 1545638500614,
"question_card_data": {
"header_text": null,
"band_color": null
},
"user_status": "10",
"user_answer": "VGC3URSDU1"
}]
这是使它们成为无效JSON数据的两组字符-2: 40822: 42
和631: 42
。在对API的每个请求中,这两组数据都会动态更改。正常解析数据无济于事。
我正在使用PHP来解析contest['start_time']
之类的文件,但返回值错误。
如何解析此JSON响应或转义这两套数据?
答案 0 :(得分:0)
似乎API正在尝试返回两组不同的数据。您可以使用preg_split
提取它们:
$data = 'put your original JSON data here';
$pattern = '/\s?\d+:\s\d+(:\s\d+)?/';
$data = preg_split($pattern, trim($data));
$contest = json_decode($data[1], true);
$choiceq = json_decode($data[2], true);
preg_split
将在上面的示例中做两件事:从无效的JSON数据中提取两个单独的JSON字符串,并删除错误的字符。它使用正则表达式查找与您发布的模式匹配的所有字符串(即用冒号和空格分隔的数字),并拆分原始字符串。