繁体   English   中英

无法在PHP中访问JSON数组

[英]Not able to access JSON array in PHP

我无法通过javascript中的json访问信息。

我使用localstorage来保存一些临时数据:

var tbRomaneio = localStorage.getItem("tbRomaneio");// Recupera os dados armazenados
tbRomaneio = JSON.parse(tbRomaneio); // Converte string para objeto
if(tbRomaneio == null) { // Caso não haja conteúdo, iniciamos um vetor vazio
    tbRomaneio = new Array();
}

//Item
var medida = JSON.stringify({
    comprimento   : medidaComprimento,
    largura       : medidaLargura,
    token         : token.toString()
});
tbRomaneio.push(medida);
localStorage.setItem("tbRomaneio", JSON.stringify(tbRomaneio));

我的javascript代码发布:

$.post('/pedido/salva-romaneio', {itens: localStorage.getItem("tbRomaneio")} )
.done(function(data) {
    //ok                                
})

到现在为止还挺好。 问题是在PHP中,当我读取此信息时它返回错误。

这是我的PHP代码:

<?php
$itensRomaneio = json_decode($_POST['itens'], true);
print_r($itensRomaneio);
?>

Array
(
    [0] => {"comprimento":"230","largura":"54","token":"1495719950761"}
)

当我读取数组时,我无法访问该信息,它会出现以下错误:

//Array
for($i = 0; $i < count($itensRomaneio); $i++) {

    echo $itensRomaneio[$i]->token;

}

Error:
<p>Severity: Notice</p>
<p>Message:  Trying to get property of non-object

如果我尝试以这种方式使用它,它只返回我:

    //Array
    for($i = 0; $i < count($itensRomaneio); $i++) {

        echo $itensRomaneio[$i]['token'];

    }

Return only this:

" { "

如果我给print_r它显示:

print_r($itensRomaneio[$i]);

//show
{"comprimento":"230","largura":"54","token":"1495719950761"}

到底是怎么回事?

在将每个medida推送到tbRomaneio数组之前,您将在每个medida上调用JSON.stringify() 所以你需要解码每个元素。

foreach ($itensRomaneio as $iten) {
    $iten = json_decode($iten);
    echo $iten->token;
}

但更好的解决方案是不对每个项目进行编码,只对整个数组进行编码。

var medida = {
    comprimento   : medidaComprimento,
    largura       : medidaLargura,
    token         : token.toString()
};
tbRomaneio.push(medida);
localStorage.setItem("tbRomaneio", JSON.stringify(tbRomaneio));

然后在PHP中,如果要获取对象数组而不是关联数组,则不应使用true作为json_decode()的第二个参数。

尝试:

for($i = 0; $i < count($itensRomaneio); $i++) {

    $values = json_decode($itensRomaneio[$i]);

    echo $values->token;

}

你$ itensRomaneio是一个json字符串数组。 您需要在访问令牌属性之前解码它们。

array_walk($itensRomaneio, function($v) {
    echo json_decode($v)->token;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM