2

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

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

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

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

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

2 回答 2

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 使用“search”方法扩展了全局对象 JSON,您可以使用该方法使用 XPath 表达式查询 JSON 结构。

要查看您的数据的工作示例,请查看此小提琴:http: //jsfiddle.net/jRN22/

于 2014-05-18T22:58:05.027 回答
0

在您的示例中, fileA.c 和 fileB.txt 是键,您可以通过迭代封闭对象中的键(由键“文件”引用)来获取它们。

我不认为 JSONPath 在这种情况下真的合适(甚至不适用),它旨在在您知道文档的结构时访问元素,这意味着您基本上知道键。简单地使用 JSON 解析器会容易得多。

于 2014-02-26T13:57:44.953 回答