JSON数据后出现意外的非空白字符?

Posted

技术标签:

【中文标题】JSON数据后出现意外的非空白字符?【英文标题】:unexpected non-whitespace character after JSON data? 【发布时间】:2011-11-26 00:28:07 【问题描述】:

我希望通过jquery.each() 输出此 php 代码回显 namestar_typeservice,但我有错误。怎么解决?

错误:

发生错误: [object Object] parsererror SyntaxError:JSON.parse:意外的非空白字符后 JSON 数据

我有这个 PHP 代码:

//$hotel_id = $this->input->post('hotel_id');
$hotel_id = array('1','2','3');
//print_r($hotel_id);
foreach ($hotel_id as $val) 
    $query_r = $this->db->query("SELECT * FROM hotel_submits WHERE id LIKE '$val' ORDER BY id desc");
    $data    = array();
    foreach ($query_r->result() as $row) 
        $data_s  = json_decode($row->service, true);
        $data_rp = json_decode($row->address, true);
        $data[]  = array(
            'name' => $row->name,
            'star_type' => $row->star . '-' . $row->type,
            'site' => $row->site,
            'service' => $data_s,
            'address' => $row->address
        );
    
    echo json_encode($data);

这是 PHP 代码上方的输出:

[
    "name": "how",
    "star_type": "5-hotel",
    "site": "www.sasaas.assa",
    "service": ["shalo", "jikh", "gjhd", "saed", "saff", "fcds"]"address": "chara bia paeen"
][
    "name": "hello",
    "star_type": "4-motel",
    "site": "www.sasasa.asas",
    "service": ["koko", "sili", "solo", "lilo"]"address": "haminja kilo nab"
][
    "name": "hi",
    "star_type": "3-apparteman",
    "site": "www.saassaas.aas",
    "service": ["tv", "wan", "hamam", "kolas"],
    "address": "ok"
]

这是我的 js 代码出错:

$.ajax(
    type: "POST",
    dataType: "json",
    url: 'get_residence',
    data: dataString_h,
    cache: false,
    success: function (respond) 
        //alert(respond);
        $.each(respond[0].name, function (index, value) 
            alert(value);
        );
    ,
    "error": function (x, y, z) 
        alert("An error has occured:\n" + x + "\n" + y + "\n" + z);
    
);

【问题讨论】:

【参考方案1】:

您没有回显有效的 json。试试这个:

$hotel_data = array();
foreach(...) 
    // .. do stuff
    $hotel_data[] = $data; // add $data to the end of the $hotel_data array

echo json_encode(array('data' => $hotel_data));

这会将所有$data 数组包装成一个数组并将其放入对象的数据属性中。你可以在js端访问这些数据,如下:

$.each(response.data, function(i, obj) 
    alert(obj.name);
);

注意:我不确定我上面写的php语法,我写php已经有一段时间了:)

【讨论】:

【参考方案2】:

您的 php 输出不是有效的 json,您在 "address" 之前漏掉了一个逗号。

您可以使用以下网址检查您的 json:http://json.parser.online.fr/

【讨论】:

【参考方案3】:

您的 JSOn 完全无效。您不应该在循环内部回显 json-ecnoded 数组,而应在其外部:

$all_data = array();
foreach ($hotel_id as $val) 
    //..what you have there now, but instead if echo json_encode($data); you do
    $all_data[] = $data;

//and finally
echo json_encode('data'=>$all_data);

【讨论】:

【参考方案4】:

我发现如果您在 CI4 中的 开发 模式下工作,响应会附带额外的 javascriptstyle 文本,因此当您尝试解析为 json 时会抛出该错误unexpected non-whitespace character after JSON data

如果您在浏览器的网络选项卡中查看响应,您可以看到额外的文本 See example

只需在项目的 .env 文件中切换到 生产 模式即可解决问题。

如果有人能解决如何在开发模式下禁用此文本,那就太好了。

【讨论】:

以上是关于JSON数据后出现意外的非空白字符?的主要内容,如果未能解决你的问题,请参考以下文章

Joomla JSON.parse:JSON 数据后出现意外的非空白字符

从 boost::property_tree 读取数组出现空白

在 Visual Studio Code 中显示空白字符

word 2003分栏出现大片空白

设置授权:JSON 数据的第 1 行第 1 列出现意外字符

SyntaxError:JSON.parse:JSON 的第 1 行第 2 列出现意外字符