我很感激我能得到的任何帮助 - 我一直在寻找堆栈溢出,无法找到任何与我想要完成的事情直接相关的事情。
问题:我试图更新JSON文件中的特定名称/值对,我试图通过AJAX调用发送特定参数来实现一个PHP文件。其中两个参数是名称的路径(用连字符描绘),以及我交换的值。
JSON的一小部分:
{
"character" :
{
"name" : "Foo",
"species" : "Bar",
}
}
以此JSON为例,我尝试更新特定的数组值,例如:
$char['character']['name']
我使用路径信息将变量传递给PHP文件,例如:
updater.php?char=character-name&val=Newname
有没有办法转换字符串"字符名称" (或具有特定描述的任何字符串)到数组中的路径,如$char['character']['name']
?
答案 0 :(得分:2)
$array = explode("-", $_GET['char']);
$char=json_decode(....); //your json string
$char[$array[0]][$array[1]]=$_GET['val'];
答案 1 :(得分:1)
这样的事情应该有用,我想:
$a = explode("-", $_GET['char']);
$array = ...; //Your json array here
while (is_array($array) && count($a) > 0)
{
$array = $array[array_shift($a)];
}
答案 2 :(得分:1)
不仅要读取指定路径的值,还要更新json,我建议像
<?php
function json_replace_path($json, $path, $newValue)
{
$json = json_decode($json);
$pathArray = explode('-', $path);
$currentElement = $json;
foreach ($pathArray as $part)
{
$currentElement = &$currentElement->$part;
}
$currentElement = $newValue;
return json_encode($json);
}
$json = '{"character":{"name":"Foo","species":"Bar","other":{"first_name":"Jeff","last_name":"Atwood"}}}';
echo json_replace_path($json, 'character-name', 'new name') . "\n";
echo json_replace_path($json, 'character-species', 'new species') . "\n";
echo json_replace_path($json, 'character-other-last_name', 'Bridges') . "\n";
不支持包含数组的JSON。
答案 3 :(得分:0)
为什么不使用updater.php?character[name]=Newname
?然后你可以得到它:
echo $_GET['character']['name'];
更有意义。为什么要连接东西,然后尝试将它们分成一个数组,从一开始就可以使用数组?