从数据中删除某些字符以使其成为有效的json

时间:2018-12-25 17:40:19

标签: php json api

具有来自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: 42631: 42。在对API的每个请求中,这两组数据都会动态更改。正常解析数据无济于事。
我正在使用PHP来解析contest['start_time']之类的文件,但返回值错误。
如何解析此JSON响应或转义这两套数据?

1 个答案:

答案 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字符串,并删除错误的字符。它使用正则表达式查找与您发布的模式匹配的所有字符串(即用冒号和空格分隔的数字),并拆分原始字符串。