2013-05-09 56 views
2

我有像這樣一個JSON:轉換常規JSON爲flare.json爲d3.js?

{ 
"a": { 
    "x": { 
     "y": { 
      "a": {}, 
      "z": {}, 
      "b": {} 
     } 
    }, 
    "c": {}, 
    "b": { 
     "c": { 
      "d": {} 
     } 
    }, 
    "d": {}, 
    ... 
    } 
} 

是否有一個快速的方法來將其轉換爲flare.json格式?

像這樣:

{ 
"name":"a", 
"children":[ 
     { 
     "name":"x", 
     "children": 
      { 
       "name":"y", 
       "children":[{"name":"a", "size":0},{"name":"z","size":0},{"name":"b","size":0}] 

... 
} 

謝謝。

+0

@Neal我確實想出了一些奇特的東西!看看我的答案! – ComputerFellow 2013-05-13 12:50:38

回答

6

我爲此想出了一系列正則表達式轉換。

#replace-this  #with-this 

    ^\s*"    \{"name":" 
    : \{\},   \}, 
    : \{\}   \} 
    ": \{$   ","children":\[ 
    ^\s*\},   \]\}, 
    ^\s*\}   \]\}    


#in that order 

,只是刪除第一個和最後一行(應該是一個額外的{]})上應用這些正則變換

這樣的:

{ 
"a": { 
"x": { 
    "y": { 
     "a": {}, 
     "z": {}, 
     "b": {} 
    } 
}, 
"c": {}, 
"b": { 
    "c": { 
     "d": {} 
    } 
}, 
"d": {} 
} 

}

會變成這樣:

{ 
"name": "a", 
"children": [{ 
    "name": "x", 
    "children": [{ 
     "name": "y", 
     "children": [{ 
      "name": "a" 
     }, 
     { 
      "name": "z" 
     }, 
     { 
      "name": "b" 
     }] 
    }] 
}, 
{ 
    "name": "c" 
}, 
{ 
    "name": "b", 
    "children": [{ 
     "name": "c", 
     "children": [{ 
      "name": "d" 
     }] 
    }] 
}, 
{ 
    "name": "d" 
}] 
} 

然後它可以與一些d3js示例一起使用。

-1

你可以使用d3.nest(),但是這個功能不會給你所需的大小,甚至。您可能需要在將數據發送到應用程序之前相應地格式化數據。

如果你想創建一個自定義函數,那麼你可以看看this的答案並迭代你的對象的鍵,因爲它甚至不是一個數組。

1

你將不得不編寫自己的JSON或函數來動態更改JSON。 Flare.json只遵循一個遵循Mike Bostock的d3文件的模式。

我給你一個提示。你寫的模式似乎是(在僞代碼)

array("name":"a", "children":array("name":"x","children":array(..... 

基本上,你需要爲了得到想要的結果來創建多維數組。不幸的是,我不知道你是如何得到你的數據的,所以我不能告訴你更多。如果使用PHP使用json_encode方法

echo json_encode($jsonArray) 

或在javascript使用,以獲得陣列變成JSON json.stringify

var json = JSON.stringify($jsonArray)