如何将JSON漂亮地打印成基于行的键结构


How to pretty print JSON into a line based key structure?

假设我有一个任意嵌套的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中使用的密钥的概述,那么使用JSONAPI将变得更容易。

我将如何在PHP或nodejs中实现这一点?或者其他工具?如果文本值很长,那么它可以被截断为基于行的。

请注意,在大多数情况下,您应该简单地用所需的目标语言解析JSON。如果这不是一个选项,你可以很容易地迭代所有元素,比如:

<?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);