【问题标题】:Iterate through JSON String in PHP?遍历PHP中的JSON字符串?
【发布时间】:2021-10-14 15:39:14
【问题描述】:

这似乎是一个非常简单的问题,但我有点挣扎:我正在通过 JavaScript 接收 JSON 字符串。现在我想遍历元素。结果字符串具有这种形式:{"title":value,"title2":value}

如何在不知道键和值的情况下遍历这个 JSON 字符串?我想得到这个输出:

标题 -> 值

title2 -> value2

我是这样尝试的:

$json = file_get_contents('php://input');
$array = json_decode($json,true);
$response = "Test";
foreach($array as $key=>$val) {
    $response = $response. "$key : $val";
}

echo json_encode($response);

它只返回“测试”。如果我将其更改为 echo json_encode($array),它将返回提到的 JSON 字符串。

【问题讨论】:

  • 等等,您使用的是 php 还是 javascript?你在你的问题中提到了这两个。我用php回答,但是用js也很简单
  • JavaScript 作为发送者,php 作为接收者。
  • 您尝试过什么来解决问题?你被困在哪里了?你有没有尝试转储$array,只是为了看看它包含什么?

标签: javascript php arrays json iteration


【解决方案1】:

你在你的问题中提到了 javascript 和 php,所以我将同时回答这两个问题。这是JS,两种不同的方式。我相信 foreach 现在正在被淡化为支持 (of) 构造,但我主要不是在 JS 中工作:

var json = '{"title": 12, "title2": "text"}';
var data = JSON.parse(json);

Object.keys(data).forEach(function(key) {
  console.log(key + ' -> ' + data[key])
})

for(key of Object.keys(data)) {
  console.log(key + ' -> ' + data[key]);
}

对于 PHP:

您可以使用 json_decode 将 json 字符串解析为数组:

$json = '{"title": 12, "title2": "text"}';
$arr = json_decode($json, true);
foreach($arr as $key=>$val) {
    echo "$key : $val";
}

true 将其解析为数组而不是 std 对象。

https://www.php.net/manual/en/function.json-decode.php

【讨论】:

  • 我添加了我使用的代码。不幸的是,它没有进入循环。你知道可能出了什么问题吗?可能是因为类型的错误? JSON_decode 返回一个字符串。
  • json_decode 在一方面是不好的,因为它会默默地失败。您可以调用 json_last_error() 来获取最后一个错误并进行故障排除。我将首先检查 $json 的值,以确保它是有效的 json。 php.net/manual/en/function.json-last-error.php
  • json_decode 返回一个字符串,所以好像失败了。
  • 你也可以使用类似 echo "
    "; 来检查数组的值。 print_r($array);回声“
    ”;回声“
    ”; var_dump($json);回声“
    ”;退出;
  • json_decode 返回什么? json_last_error 是否显示错误? $array 包含什么?
【解决方案2】:

由于响应的格式,您必须对解码后的格式进行解码才能获取所需的对象

$json = '{"title": 12, "title2": "text"}';
$encoded=json_encode($json);
$decoded=json_decode($encoded);
$ddecode=json_decode($decoded);
foreach($ddecode as $key=>$val) {
    echo "$key -> $val";
}

输出:

title -> 12 title2 -> text

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多