我在一个文件中有一个JSON对象,我存储在一个变量中,但我似乎无法做任何我想要的东西,因为它嵌套在一个数组中

时间:2013-02-21 09:34:38

标签: php json tab-delimited

我的json文件的内容格式如下:

[
  {
    "id": 1,
    "keyword_filter": null,
    "name": "My Name ",
    "type": "some product",
    "sku": "1234567",
    "nested_obj": {
      "url": "http://someurl.com",
      "resource": "/orders"
    }
  }
]

我可以把它读成这样的变量:

$json_string = file_get_contents($jsonFile);

最终,我需要创建一个制表符分隔文件,但我似乎无法迭代它。这是我尝试过的:

foreach($json_string as $item) {
    echo $item;
}

这给了我一个错误,说我在foreach循环中提供了一个无效的参数。

我试着把它读成这样的数组:

$json_array = file($jsonFile);
foreach($json_array as $item) {
    echo $item;
}

这回显了一个包含1个项目的数组,它是JSON对象。

有人可以告诉我如何进入该JSON对象,以便我可以迭代它吗? 将其编码回JSON只是双重转义引号并解码它返回NULL。

这里的任何帮助都将非常感激...并且任何关于转换为制表符分隔文件的提示都会非常受欢迎,但我会在第一步就没问题。

感谢。

3 个答案:

答案 0 :(得分:2)

试试这个:

json_decode:将json字符串转换为数组:http://php.net/manual/en/function.json-decode.php

$array  = json_decode($json_string, true);

echo "<pre>";
print_r($array);

/// write the forech basd on the array out put.    

foreach($array as $item) {
    echo $item['id'];
}

答案 1 :(得分:1)

我试过了:

<?php

$str = '[
  {
    "id": 1,
    "keyword_filter": null,
    "name": "My Name ",
    "type": "some product",
    "sku": "1234567",
    "nested_obj": {
      "url": "http://someurl.com",
      "resource": "/orders"
    }
  }
]';


$array  = json_decode($str, true);

echo "<pre>";
print_r($array);

/// write the forech basd on the array out put.    

foreach($array as $item) {
    echo $item['id'];
}

?>

我得到了输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [keyword_filter] => 
            [name] => My Name 
            [type] => some product
            [sku] => 1234567
            [nested_obj] => Array
                (
                    [url] => http://someurl.com
                    [resource] => /orders
                )

        )

)
1

这是你想要的出局。在数组末尾,您可以看到1

的值echo $item['id'];

答案 2 :(得分:1)

您需要从中创建制表符分隔的文件

$json_string = json_decode(file_get_contents($jsonFile), true);

foreach ($json_string as $k => $vals){
 // tab delimited header
 if ($k == 0) {
  echo join ("\t", array_keys($vals))."\n";
 }
 // tab delimited row
 echo join ("\t", $vals)."\n";

}