使用JsonPath在不知道密钥的情况下提取值

时间:2014-02-26 13:34:44

标签: java json jsonpath

我有一个像这样的json字符串:

  "files": {
     "fileA.c": {
         "size": 100
     },
     "fileB.txt": {
         "size": 200
     }
  }

我想使用JsonPath提取文件名{“fileA.c”,“fileB.txt”}。请注意,文件数量未知。

问题是,我不知道文件名是键还是值:

  • 如果它是关键......我当然不知道关键名称,因为这是我要提取的信息。
  • 如果它是一个值,那它的关键是什么?
  • 我可以使用JsonPath提取文件名吗?如果是这样,怎么样?
  • 如果JsonPath无法做到这一点,Json是否有可以实现此目的的Java库?

2 个答案:

答案 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/