未解析嵌套在 JSON 响应中的值

我正在对端点进行 REST 调用,但遇到了内部属性保持字符串而不转换为 Javascript 的问题。


这是我得到的:


"43750": {

    "taskId": 43750,

    "statusId": 1,

    "set_at": "2019-03-27 16:20:51",

    "userId": 2,

    "value": "[{\"text\":\"Recreational Vehicle\"}]" <-- Problem

},

这是我应该得到的(旧 API 响应):


"43750": {

  "userId": "2",

  "timestamp": "2019-03-27 16:20:51",

  "value": [

      {

         "text": "Recreational Vehicle"

      }

   ],

   "statusId": "1"

},

这些是来自 Chrome 的 DevTools 网络部分的响应选项卡的片段。


出于某种原因,对象数组没有被解析为 javascript,而是剩余的字符串。我在 PHP 中将 Content Type 设置为 json 并在请求中使用了 json 数据类型。我错过了什么?


前端


  $.ajax({

        type: 'POST',

        dataType: 'json',

        url: API_URL,

        data: {

           action: 'getProject',

           projectId: this.getActiveProjectId()

        },

        success: function (response) {


            console.log('[AJAX RESPONSE] LOAD ACTIVE PROJECT', response);

            debugger;

        }

    });

后端


<?php

$default_options = [

            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,

            PDO::ATTR_EMULATE_PREPARES => false,

            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

        ];


$pdo = new PDO(

    sprintf(

    "dblib:host=%s;dbname=%s",

        $server,

        $database

    ),

    $user,

    $pass,

    $default_options

 );


/* Determine action, handle request */


/* Do PDO Query */    

$tasks = $statement->fetchAll();


header("Access-Control-Allow-Origin: *");

header('Content-Type: application/json');


echo json_encode($tasks, JSON_PRETTY_PRINT);


喵喵时光机
浏览 140回答 1
1回答

慕标琳琳

value表中的列包含一个JSON字符串。您要么需要在发送响应之前对其进行解码:foreach ($tasks as &$task) {&nbsp; &nbsp; $task['value'] = json_decode($task['value']);}或者在 JavaScript 中执行:success: function(response) {&nbsp; &nbsp; response.forEach(r => r.value = JSON.parse(r.value));&nbsp; &nbsp; // rest of success function}
打开App,查看更多内容
随时随地看视频慕课网APP