php json_decode return [object Object]

时间:2014-05-06 10:25:57

标签: php json object

我在PHP中遇到JSON数据问题。我需要在我的SQL语句中使用来自此JSON的数据。当我尝试使用echo(var_dump或print_r也不能正常工作)调试它时,命令输出为

{"records":"tekst","name":"[object Object]"}

这是一个JSON结构:

            {
                records: 'tekst',
                name: {
                    imie: 'imie1',
                    nazwisko: 'nazwisko1'
                }
            }

我试图通过json_decode()对此进行解码,但我有错误

  

"警告:json_decode()期望参数1为字符串,数组   给定"

有谁知道错误是什么?

1 个答案:

答案 0 :(得分:0)

关于JSON和所需格式的PHP手册: function.json-decode 。基本上,只有双引号和名称必须引用。

使用PHP进行转换演示。

所以,你提供了一个看起来像的json字符串,删除了空格,如下所示:

{records:[{id:1,name:'n1'},{id:2,name:'n2'}]}

这是一个包含数组的对象,该数组包含两个可以是数组或对象的条目。

之外,它不是有效的JSON字符串,因为它包含单引号。 PHP需要双引号中的所有名称,如“id”:1。

因此,可能的PHP代码重新创建它,假设数组作为内部条目是:

$json = new stdClass();
$records = array();
     $entry = array('id' => 1, 'name' => 'n1');
     $records[] = $entry;

     $entry = array('id' => 2, 'name' => 'n2');
     $records[] = $entry;
$json->records = $records;

$jsonEncoded = json_encode($json);

当'dump'ed看起来像:

object(stdClass)[1]
  public 'records' => 
    array
      0 => 
        array
          'id' => int 1
          'name' => string 'n1' (length=2)
      1 => 
        array
          'id' => int 2
          'name' => string 'n2' (length=2)

现在,结构产生的字符串是:

{"records":[{"id":1,"name":"n1"},{"id":2,"name":"n2"}]}

看起来与你的相似,但并不完全相同。请注意双引号中的名称。

但是,如果你的json字符串看起来相同,那么PHP可以解码它,如下所示:

$jsonDecoded = json_decode($jsonEncoded);

var_dump($jsonDecoded, 'decoded');

输出:记下所有对象......

object(stdClass)[2]
  public 'records' => 
    array
      0 => 
        object(stdClass)[3]
          public 'id' => int 1
          public 'name' => string 'n1' (length=2)
      1 => 
        object(stdClass)[4]
          public 'id' => int 2
          public 'name' => string 'n2' (length=2)

我们可能需要数组,所以使用true作为'decode'

中的第二个参数
$jsonDecoded = json_decode($jsonEncoded, true);

var_dump($jsonDecoded, 'decoded with true switch');

输出:使用数组而不是对象。

array
  'records' => 
    array
      0 => 
        array
          'id' => int 1
          'name' => string 'n1' (length=2)
      1 => 
        array
          'id' => int 2
          'name' => string 'n2' (length=2)
string 'decoded with true switch' (length=24)