【问题标题】:How to parse json in php from url如何从url解析php中的json
【发布时间】:2015-01-05 16:43:08
【问题描述】:

我是 json 新手,所以我想问你一个可能非常简单的问题。 我试过四处寻找,但没有找到任何可以上班的东西。 我已经调用了一个 API 并以 json 格式接收了数据。 现在我的问题是通过我的 php 解析它,它“找不到任何东西”。 我的代码如下所示:

$opts = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Accept: application/vnd.travify.v1+json\r\n"
    )
);

$context = stream_context_create($opts);
$url = 'http://oda.ft.dk/api/Sag?$select=titel,Sagskategori/kategori&$expand=Sagskategori';
$output = file_get_contents($url, false, $context); 

$string = file_get_contents($url, false, $context); 
$result = json_decode($string, true);

$i = -1;

foreach ($result as $data) {
    $i++;
    echo "#";
    echo $i;
    echo "<br>";
    echo "<b>Test 1:</b>";
    echo "<br>";
    if(!empty($result[$i]['value']['Sagskategori']['kategori'])){
        echo $result[$i]['value']['Sagskategori']['kategori'];
    }else{
        echo "Intet fundet.";
    }
    echo "<hr>";
}

json 代码可以在这里找到:http://oda.ft.dk/api/Sag?$select=titel,Sagskategori/kategori&$expand=Sagskategori

你们中的任何人都可以看到我在代码中的失败,并让我走上正确的道路:-) 吗?

【问题讨论】:

  • 快速旁注-您将$i初始化为-1,然后将其作为foreach中的第一件事进行递增,以使0?这是部分合乎逻辑的。为什么不将其初始化为0,然后作为foreach 中的最后一个操作递增?
  • 在执行foreach() 循环之前尝试执行var_dump($result)print_r($result) 以查看结果变量的样子。我首先要检查的主要内容是您要返回一个迭代对象。我认为,您只会取回一个对象,因此您的整个循环想法可能不是正确的方法。 JSON 中的第一个值不是数组。 edit 我已经看到了一些类似的答案。为那些点赞。 :)

标签: php json api parsing decode


【解决方案1】:

请更换

foreach ($result as $data) {

通过

foreach ($result["value"] as $data) {

现在您可以迭代到您的值数组并从 $data 获取所有信息 您不需要使用 $i,$data 包含正确的 $result[$i] 值

foreach ($result["value"] as $data) {
    echo "#";
    echo "<br>";
    echo "<b>Test 1:</b>";
    echo "<br>";
    if(!empty($data['Sagskategori']['kategori'])){
        echo $data['Sagskategori']['kategori'];
    }else{
        echo "Intet fundet.";
    }
    echo "<hr>";
}

【讨论】:

  • 谢谢! - 你拯救了我的一天:-)
【解决方案2】:

JSON 开头是这样的:

{
  "odata.metadata":"...snip...","value":[
{

所以数组value对象内。

正确的代码应该是:

 foreach ($result['value'] as $data) {
    // snip
    if(!empty($result['value'][$i]['Sagskategori']['kategori'])){
        echo $result['value'][$i]['Sagskategori']['kategori'];
    }

此外,在循环内部,$result['value'][$i]['Sagskategori']['kategori']; 与使用 $data['Sagskategori']['kategori']; 完全相同。

【讨论】:

  • 非常感谢:-)!这是一个很大的帮助!
猜你喜欢
  • 2015-08-12
  • 2014-08-01
  • 1970-01-01
  • 2021-06-05
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多