2015-02-14 4 views
0

Я ищу библиотеку, которая может анализировать мой json глубоко с помощью ключа, т. Е. Находить значения внутри массива словарей.Javascript - Advanced JSON keypaths

Учитывая следующий JSON объект:

{ 
    "root" : 
    { 
     "infos" : 
     { 
      "sport" : [ 
         {"name" : "tennis"}, 
         {"name" : "basket"} 
         ] 
     } 
    } 
}; 

я смог бы сделать что-то вроде var sport = json.valueForKeyPath('root.infos.sport.name'), который должен вернуть ["tennis", basket"].

Я пробовал underscore-keypath.min.js, но он не может этого сделать.

Кто-нибудь знает библиотеку, которая может это сделать?

+0

'root.sport.name' или' root.infos.sport.name'? – thefourtheye

+0

Это можно сделать с помощью базового javascript, для чего вам нужна библиотека? – void

+0

@thefourtheye 'root.infos.sport.name' извините. @void, как это можно сделать в базовом JS? – Yaman

ответ

0

Я сделал немного LIB, который может сделать это, вы можете найти его на GitHub:

https://github.com/blauharley/TemplateJS

Вот пример того, что вы можете делать с ним:

var objs = [ 
    { dim: { x: 25, y:14, z: 3}, name: 'circle'}, 
    { dim: { x: 19, y:17, z: 8}, name: 'triangle'}, 
    { dim: { x: 7, y:44, z: 12}, name: 'quad'}, 
    { dim: { x: 13, y:63, z: 67}, name: 'circle'}, 
    { dim: { x: 5, y:23, z: -2}, name: 'rectangle'} 
]; 
var templ = new TemplateJS(); 
// if you have got more than one value to insert separate the values with pipes (|) 
var str = "<p>{name}: | <b style='color:green'>{dim}{x}px</b> | <b style='color:red'>{dim}{y}px</b> | <b style='color:yellow'>{dim}{z}px</b></p>"; 
templ.transformTemplate(objs,str); 

Есть два метода, но transformTemplate подходит для вашего вопроса больше. Он возвращает массив строк, которые основываются на заданных объектах. Он принимает каждый объект (из objs-array) и помещает его значения свойств в строку, указанную как второй параметр. В конце transformTemplate возвращает массив преобразованный строки.

Второй способ insertTemplate делает почти то же самое, но считается, что он используется для вставки кучи значений в HTML-элементы.

С трубками | вы разделяете значения объектов, а фигурные скобки самоочевидны. Эта библиотека может обрабатывать бесконечные объекты-вложения (не массивы) гипотетически, как вы можете видеть в TestCase, выполненном с помощью Jasmine.

К сожалению, оба методы ожидает массив объектов, как первые пары поэтому, когда вы хотите использовать этот LIB, вы можете использовать его таким образом:

var source = { 
    'root': 
    { 
    'infos': 
    { 
     'sport': [ 
     { 
      'name': 'tennis' 
     }, 
     { 
      'name': 'basket' 
     } 
     ] 
    } 
    } 
}; 
var templ = new TemplateJS(); 
// if you have got more than one value to insert separate the values with pipes (|) 
var str = '{name}'; 
templ.transformTemplate(source.root.infos.sport, str); // ["tennis", "basket"] 

Кроме того, он тестируется во всех браузерах.

+0

Спасибо, я дам ему попробовать – Yaman

+0

Он должен соответствовать любой потребности. Надеюсь, вы найдете ее полезной. – Blauharley

+0

Не могу заставить его работать :(Я работаю в среде Parse Cloud Code, я думаю, что не вся библиотека разрешена для запуска. У меня есть следующая ошибка '{" code ": 141," error ":" ReferenceError : TemplateJS не определен \ n в модулях/test.js: 19: 18 "}' (PS: я большой новичок в JS) – Yaman