【问题标题】:Parsing JSON in PHP在 PHP 中解析 JSON
【发布时间】:2012-01-21 07:33:59
【问题描述】:

我有以下 JSON 字符串:

{"Data":{"Recipes":{"Recipe_5":{"ID":"5","TITLE":"Spaghetti Bolognese"},"Recipe_7":{"ID":"7","TITLE":"Wurstel"},"Recipe_9":{"ID":"9","TITLE":"Schnitzel"},"Recipe_10":{"ID":"10","TITLE":null},"Recipe_19":{"ID":"19","TITLE":null},"Recipe_20":{"ID":"20","TITLE":"Hundefutter"},"Recipe_26":{"ID":"26","TITLE":"Apfelstrudel"},"Recipe_37":{"ID":"37","TITLE":null},"Recipe_38":{"ID":"38","TITLE":"AENDERUNG"},"Recipe_39":{"ID":"39","TITLE":null},"Recipe_40":{"ID":"40","TITLE":"Schnitzel"},"Recipe_42":{"ID":"42","TITLE":"Release-Test"},"Recipe_43":{"ID":"43","TITLE":"Wurstel2"}},"recipes_id":{"ranking_1":"9","ranking_2":"10","ranking_3":"7","ranking_4":"5"}},"Message":null,"Code":200}

如何在 PHP 中解析它并提取TITLEs 的列表?

【问题讨论】:

  • 除了没有指定你想用什么语言/用什么工具来解析这个JSON对象:Spaghetti Bolognese到底是从哪里来的?这会导致 JSON 格式错误。
  • 对不起,忘了那个。当然,它不是 JSON 字符串的一部分。

标签: php json parsing


【解决方案1】:

您可以使用function json_decode 在 PHP 中解析 JSON 数据(至少 >= 5.2.0)。一旦你有了一个 PHP 对象,就应该很容易遍历所有食谱/成员并访问它们的标题,使用如下所示:

$data = json_decode($json, true); // yields associative arrays instead of objects
foreach ($data['Data']['Recipes'] as $key => $recipe) {
    echo $recipe['TITLE'];
}

(抱歉,我现在实际上无法运行此代码。希望它对您有所帮助。)

【讨论】:

  • 是的,我已经有了! $obj = json_decode($jsonstring);现在,在我的 $obj 中是我在上面发布的 JSON。但是我怎样才能迭代食谱呢?对不起,我已经搜索了很多,但没有找到任何地方
  • 使用关联数组和foreach 应该可以解决问题——请参阅我的更新答案。
  • 哇太棒了!我的问题是我在解码方法中没有“真实”。为什么我需要那个?
  • 如评论中所述,true 会返回一个关联数组,而不是一个普通的 PHP 对象。如您所见,使用foreach 更容易遍历关联数组。
【解决方案2】:

如果您想在 JavaScript 中执行此操作,您可以像访问“普通”对象一样简单地访问 JSON 数据:

var jsonData = {
    "Data": {"Recipes": {"Recipe_5": {"ID":"5","TITLE":"Spaghetti Bolognese"}}}
    // more data
};
alert(jsonData.Data.Recipes.Recipe_5.TITLE);

这将在消息框中打印Recipe_5TITLE

编辑:

如果你想要一个列表中的所有标题,你可以这样做:

var titles = [];
for (var key in jsonData.Data.Recipes) {
    var recipe = jsonData.Data.Recipes[key];
    titles.push(recipe.TITLE);
}
alert(titles);

【讨论】:

  • 好的,我明白了。但是,如果我想要 JSON 字符串中每个 Recipe 的 TITLE,那么我不必知道 Recipe_5 存在。
  • 我用 php 打印出来... print_r($obj->Data->Recipes->Recipe_5->TITLE);例如给我recipe5的标题,但我想拥有Recipes中的所有标题
  • 再一次,你想用这些标题做什么?我编辑了我的答案以解释如何将它们全部放入一个 JavaScript 数组中——不过不知道这是否是你想要的。
  • 我编辑了您的问题,以反映您对 PHP 的兴趣,并添加了一个新的简短答案。 (我不确定这是否是处理这种情况的首选方法......是吗,stackoverflow 专业人士?)
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2015-11-13
相关资源
最近更新 更多