我正在寻找一个可以使用密钥路径深入解析我的json的库,即在字典数组中查找值。
考虑以下JSON对象:
{
"root" :
{
"infos" :
{
"sport" : [
{"name" : "tennis"},
{"name" : "basket"}
]
}
}
};
我可以执行类似var sport = json.valueForKeyPath('root.infos.sport.name')
的操作,该操作应返回["tennis", basket"]
。
我尝试了underscore-keypath.min.js
,但却无法做到。
有人知道可以做到这一点的图书馆吗?
答案 0 :(得分: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元素中。
使用管道|你分开对象和花括号的值是自我解释的。这个lib可以假设处理无限的对象嵌套(不是数组),正如你在使用Jasmine完成的TestCase中看到的那样。
不幸的是,两种方法都希望将一个对象数组作为第一个参数,所以当你想使用这个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"]
此外,它在所有浏览器中都经过测试。