我有多个具有相同架构的JSON文件:
{"q0":{"query":"William","limit":3}}
{"q1":{"query":"Joe","limit":3}}
使用xpath或JSONPath我想将每个元素提取到表中:
|id | query |limit |
|q0 | William | 3 |
|q1 | Joe | 3 |
使用..query
和..limit
获取查询和限制字段没有问题,但我可以找到提取id
字段的语法(即q0
和q1
)。
我一直在尝试@*
和$*
但没有成功。
那么有没有办法选择一个没有节点名的JSON元素?
如评论中所述,我使用talend tExtractJSONField组件,该组件使用XPath来解析JSON。
答案 0 :(得分:2)
使用.
可以获取当前元素。使用JsonPath不可能提取密钥名称。因此,您可以使用for
并抓取密钥名称在JavaScript中执行此操作。
以下HTML显示了一个完整的示例:
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="jsonpath.js"></script>
</head>
<body>
<h1 id="h1"></h1>
<script type="text/javascript">
var o = {"q0":{"query":"WilLIAM","limit":3}};
var key;
for(var i in jsonPath(o, ".")[0]) key = i;
document.getElementById("h1").appendChild(document.createTextNode(
key
));
</script>
</body>
</html>
这是一个Plunkr:http://plnkr.co/edit/CaZD1lVhr1E2S8VN5vnP
答案 1 :(得分:0)
http://goessner.net/articles/JsonPath/处的文档会指向$.q0
。
答案 2 :(得分:0)
使用Google的Gson库,您可以阅读以下内容。
HashMap<String, JsonElement> myMap = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, JsonElement>>(){}.getType());
String id = null, query = null;
int limit = 0;
for (Entry<String, JsonElement> entry : myMap.entrySet()) {
id = entry.getKey();
if(entry.getValue() != null) {
JsonElement je = entry.getValue();
if(je.isJsonObject()) {
JsonObject jo = je.getAsJsonObject();
query = jo.get("query").getAsString();
limit = jo.get("limit").getAsInt();
}
}
}
print("id : " + id + " query : " + query + " limit : " + limit);
答案 3 :(得分:0)
实际上,您可以使用DefiantJS在JSON结构上使用XPath。该库使用方法&#34; search&#34;扩展全局对象JSON。 - 使用它可以使用XPath查询JSON结构。该方法将匹配作为数组返回。
var data = [
{
"q0": {
"query": "William",
"limit": 3
}
},
{
"q1": {
"query": "Joe",
"limit": 1
}
},
{
"q1": {
"query": "Bill",
"limit": 2
}
}
],
found_1 = JSON.search(data, "//*[limit=3]"),
found_2 = JSON.search(data, "//*[limit>1]");
document.getElementById('output_1').innerHTML = found_1[0].query;
document.getElementById('output_2').innerHTML = found_2[0].length;
要看到这一点,请查看这个小提琴; http://jsfiddle.net/hbi99/zWU6x/
此外,请在此处查看XPath评估程序以查看和测试XPath查询; http://defiantjs.com/#xpath_evaluator