我在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为字符串,数组 给定"
有谁知道错误是什么?
答案 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)