由于添加了双引号,json对象变成了字符串?

Posted

技术标签:

【中文标题】由于添加了双引号,json对象变成了字符串?【英文标题】:json object becoming string because double quotes are added? 【发布时间】:2019-08-09 06:33:25 【问题描述】:

我有来自 mysql 的数据,回答如下: How to SQL query parent-child for specific JSON format?。基本上我使用JSON_OBJECT() 查询它,它会产生结果:

results<-- The column name

"projects": "project_name": "project 1", [2nd layer stuff]  <-- the row

太棒了。 MySql 为我做了 json 的事情。我对 php 函数进行了 ajax 调用,以将其传送到 Web 服务器上。:

myPhpFunction () 
    //some usual PDO code
    echo json_encode($query_result);

在 JS 上,我做了一个 jQuery ajax 调用:

var ajaxRequest =
$.ajax(
        type: 'post',
        url: '../includes/ajax.php',
        data: 'action' : 'myPhpFunction',
        dataType: 'json'
      );

      ajaxRequest.done(function(data)  
        //$.each(data[0].results.projects, function(key, val) 
            //I want to access each stuff in the object here
        //
        $('#ph-projects').append(JSON.stringify(data)); //testing it out
      

此时我遇到的问题是,我的对象 data 输出如下:

 "results": "..." 

结果值是一个字符串,因为这些双引号!

这快把我逼疯了。我是否错过了防止这种情况发生的步骤?

【问题讨论】:

如果你的 MYSQL 已经返回了一个 json 字符串,为什么还要重新编码呢? 如果我不在 php 中做 json_encode(),我的 JS 说它会得到一个数组 你能用JSON.parse(data)代替stringify吗? 您需要展示如何获取行并对其进行编码。这就是问题所在。 @Rollor 你能在return json_encode($query_result); 之前做一个die(gettype($query_result)); 并发布结果吗?如果它是一个数组,请执行die(gettype($query_result['results'])); 【参考方案1】:

json_encode() 工作正常,因为它按照您的问题 ( "results": "..." ) 的建议将结果作为 JSON 对象提供。并且 PDO 中的 JSON_OBJECT() 返回字符串很好,正如名称 JSON 所暗示的那样,它的 javascript Object Notation 采用人类可读的格式。

你可以在服务器端做:

json_encode(['results'=&gt; json_decode($query_result['results'])]);

在客户端,

function(data) 
    data.results = JSON.parse(data.results);
    // Your json data here

【讨论】:

谢谢!我只尝试了客户端版本:var jdata = JSON.parse(data[0].results);,然后在jdata上工作

以上是关于由于添加了双引号,json对象变成了字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax

为啥双引号会变成单引号

Python 处理JSON数据

VBA中字符变量双引号如何去除?我的变量赋值使用时因为是字符变量自带了双引号导致赋值后无法识别

javascript的JSON对象

JS方法的参数 刚开始学JS,有些方法的参数是加了双引号,有些没有,这个是怎么区分的呢