【问题标题】:Trying to read json object in php always returns "undefined"尝试在 php 中读取 json 对象总是返回“未定义”
【发布时间】:2019-06-17 21:32:25
【问题描述】:

我正在将 Node.js 中的 POST 请求发送到 php 服务器。在请求中,我将 json 作为对象而不是字符串。

Node.js 请求:

var request = require('request');

let data = { "name":"John", "age":30, "car":null };

request.post({
  headers: {'content-type' : 'application/json; charset=utf-8'},
  url: 'http://0.0.0.0:9000/html.php',
  method: 'POST',
  json: data
}, function(error, response, body){
  console.log(body);
});

html.php:

<?php
# Get JSON as an object
$json = file_get_contents('php://input');

$name = $json->name;

echo $json // Prints out the whole json correctly
echo $name; // Prints out "undefined"

我希望输出是“John”而不是“undefined”

【问题讨论】:

  • undefined 是一个 js 错误 - PHP 输出的 js 中有一个错误 - 而不是 PHP 中的错误
  • $json 是一个字符串。使用前需要解码:json_decode($json);
  • @sergiu.siminiuc 我向你保证——不可能
  • 请向我们展示echo $json的输出
  • 无法将 JSON 作为对象发送。你已经证明你用echo $json;发送了一个字符串

标签: php node.js json


【解决方案1】:

当您获得 JSON 时,它会以字符串的形式出现(正如您使用 echo $json 所证明的那样)。要使其成为对象,您必须对其进行解码:

# Get JSON as an object
$json = file_get_contents('php://input');
$jsonObject = json_decode($json);

$name = $jsonObject->name;

echo $json // Prints out a string
echo $name; 

EXAMPLE

【讨论】:

  • 获取:可恢复的致命错误:stdClass 类的对象无法转换为字符串((即使“示例”链接有效)
【解决方案2】:
$data = json_decode($json,true); 
echo $data['name'];

这对你有用。

true 参数会将 json 转换为数组。如果您不使用它,那么它会将其转换为一个对象,这意味着您可以使用 -&gt; 访问嵌套元素

类似于:

$data = json_decode($json); 
echo $data->name;

这就是在json_decode 函数中使用true 作为第二个参数的区别。我认为你在那里混了一点,这就是为什么它对你不起作用。

【讨论】:

  • 顺便说一句 - 不是我的 DV。
  • 是的,在你告诉他之后,但根据他所说的,他没有让它起作用。正如我在回答中解释的那样,我认为他混淆了解码中的第二个参数,并试图将数组作为对象访问或相反。谢谢你让我知道:)
  • 没有人让他知道函数的 true 参数,直到你回答。现在,去喝更多的咖啡!干杯! ¯\_(ツ)_/¯
  • 写得一模一样,但仍然得到“未定义”((
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多