如何将JSON打印成基于行的键结构?

时间:2013-11-28 04:16:47

标签: php json

假设我有一个任意嵌套的JSON文件:

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
     {"value": "Open", "onclick": "OpenDoc()"},
     {"value": "Close", "onclick": "CloseDoc()"}
   ]
 }
}}

我想输出结构:

foo.menu.id=file 
foo.menu.value=File 
foo.menu.popup.menuitem[0].value=New 
foo.menu.popup.menuitem[0].onclick=CreateNewDoc()
foo.menu.popup.menuitem[1].value=Open

等等。我的用例是,如果我可以概述我可能想要在我的mashup中使用的密钥,那么使用JSON API会更容易。

我如何在PHP或nodejs中实现这一目标?还是其他一些工具?如果文本值很长,则可以将其截断为基于行的。

1 个答案:

答案 0 :(得分:0)

请注意,在大多数情况下,您只需使用所需的目标语言解析JSON即可。如果这不是一个选项,您可以轻松地遍历所有元素,like this

<?php
function unroll_obj($o, $prefix='') {
    foreach ($o as $k => $v) {
        if (is_array($v)) {
            unroll_obj($v, $prefix . $k . '.');
        } else {
            echo $prefix . $k . '=' . $v . "\n";
        }
    }
}

$s = '{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
     {"value": "Open", "onclick": "OpenDoc()"},
     {"value": "Close", "onclick": "CloseDoc()"}
   ]
 }
}}';

$o = json_decode($s, true);
unroll_obj($o);