通过JSON发送和解码对象数组

通过JSON发送和解码对象数组

问题描述:

我有一个People对象的数组。我将它们发送给PHP,但以PHP的方式让我的对象返回,所以我可以操纵它们似乎令人费解。这是我的,但它似乎没有返回任何回我的AJAX呼叫。现在我只有1 Person对象在我的阵列中,但我想确保一切都很好,然后再继续前进。总之,当我解码我的JSON不应该将其转换为PHP中的对象?最后,我想这是PHP对象的数组People通过JSON发送和解码对象数组

jQuery的

var people = new Array(); 
var person = new Person("Michael", "Jackson", 50); 
localStorage.setItem(person.firstName + " " + person.lastName, JSON.stringify(person)); 

function Person(firstName, lastName, age) 
{ 
    this.firstName=firstName; 
    this.lastName=lastName; 
    this.age=age; 
} 

function getStorage(){ 
    var tempPerson; 
    for(var i = 0; i < localStorage.length; i++) 
    { 
     tempPerson = $.parseJSON(localStorage.getItem(localStorage.key(i))); 
     people.push(tempPerson); 
    } 
} 

function getPeople(){ 
    $.post(
     "people.php", 
     {people : people}, 
     function(data) 
     { 
      alert(data); 
     } 
    ); 
} 

getStorage(); 
getPeople(); 

PHP

<?php 
$personObj = Array(); 
$people = $_POST['people']; 

for($i = 0; $i < count($people); $i++) 
{ 
    foreach($people[$i] as $person) 
    { 
     $streamObj = json_decode($person); 
    } 
} 

echo $personObj->$firstName; 

除了制作由@Even哈恩提出的改变,您需要更改您发布如下数据:

$.post(
    "people.php", 
    {people : JSON.stringify(people)}, 
    function(data) 
    { 
     alert(data); 
    } 
); 

这样一个名称/值对发布。名称是“people”,值是Person对象数组的JSON编码字符串。

然后,当您在PHP代码中调用以下内容时,您正在将该JSON编码的字符串解码为PHP端的数组。

$people = json_decode($_POST['people']); 

我也看到你分配$personObj到一个数组,但我不明白,你把东西在数组中。

尝试在你的PHP移动你的JSON解码:

$personObj = Array(); 
$people = json_decode($_POST['people']); 

for($i = 0; $i < count($people); $i++) 
{ 
    foreach($people[$i] as $person) 
    { 
     $streamObj = $person; 
    } 
} 

echo $personObj->$firstName; 

这是因为$_POST['people']是需要解码的JSON字符串。

+0

我试过了,它说,它需要一个字符串。人是一个阵列。我将它推入getStorage()中的数组中; – Derp 2013-03-12 02:09:51

+0

[约翰S的答案似乎更好。](http://*.com/a/15352150/804100) – 2013-03-12 02:18:36

+0

+1你值得信任。 – 2013-03-12 02:49:01

也许PHP代码应该是这个样子:

<?php 
$personObj = Array(); 
$people = $_POST["people"]; 

foreach($people as $p) 
{ 
    $val = str_replace("\\","",$p); 
    $personObj = json_decode($val); 
} 

echo $personObj->firstName; 
?>