我有一个像这样的json字符串:
"files": {
"fileA.c": {
"size": 100
},
"fileB.txt": {
"size": 200
}
}
我想使用JsonPath提取文件名{“fileA.c”,“fileB.txt”}。请注意,文件数量未知。
问题是,我不知道文件名是键还是值:
答案 0 :(得分:0)
在您的示例中,fileA.c和fileB.txt是键,您可以通过迭代封闭对象中的键(由“文件”键引用)来获取它们。
我不认为JSONPath在这种情况下是非常合适的(甚至是适用的),它被设计为在您知道文档结构时访问元素,这意味着基本上您知道密钥。简单地使用JSON解析器会容易得多。
答案 1 :(得分:0)
我建议你修改你的数据结构,就像这样;
var data = {
"files": [
{
"name": "fileA.c",
"size": 100
},
{
"name": "fileB.txt",
"size": 200
},
{
"name": "fileC.txt",
"size": 50
}
]
};
当这样结构化时,您可以使用DefiantJS(http://defiantjs.com)来查询大小超过100的文件......如下所示:
JSON.search(data, '//*[size >= 100]/name')
DefiantJS使用“搜索”方法扩展全局对象JSON,使用该方法可以使用XPath表达式查询JSON结构。
要查看数据的工作示例,请查看以下小提示: http://jsfiddle.net/jRN22/