2013-05-09 2 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

ответ

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 просто следует схеме, которая придерживается файлов d3 Майка Бостока.

Я дам вам подсказку. Схема, Вы писали, как представляется (в psuedocode)

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

В принципе, вам нужно создать многомерный массив, чтобы получить желаемые результаты. К сожалению, я не знаю, как вы получаете свои данные, поэтому я не могу сказать вам больше. Если с помощью PHP использовать метод json_encode

echo json_encode($jsonArray) 

или в JavaScript Использование JSON.stringify

var json = JSON.stringify($jsonArray) 

для того, чтобы получить массив превратиться в JSON.

Смежные вопросы