我有以下json包含站点地图数据。我也使用这个json进行导航。
{
"home" : "home",
"about" : "about",
"contact" : "contact",
"products" :
{
"home" : "home",
"list" : "list",
"product" :
{
"home" : "home",
"specs" : "specs",
"warranty" : "warranty",
"related" : "related"
}
} }
程序启动后,这个json存储在像这样的变量
中Future _loadData()
{
return _http.get(url)
.then((response){
nav = response.data;
});
}
此外,我有一个列表/数组来获取当前页面和路径
列表 ----主页>产品>产品
现在用户在产品页面中,我需要将产品的孩子显示为
的导航链接三个相关问题: 我该怎么做呢? 使用json存储和检索站点地图数据是一个好主意吗? 请问xml套件吗?
答案 0 :(得分:2)
首先,您应将其转换为Dart数据结构
import 'dart:convert' show JSON;
Map sitemap = JSON.decode(nav);
然后你可以调查调试器中的sitemap
变量,看看它的结构和访问数据,如
print(sitemap['products']['product']['warranty']);
(应打印warranty
。
您还可以迭代数据
sitemap.keys.forEach((e) {
print(e);
});
答案 1 :(得分:0)
你可以使用像这样的递归函数(它可能会被优化):
dynamic json_xpath(dynamic json, String path) {
// Remove trailing '/'
path = path.substring(1);
// Get parts
List<String> parts = path.split('/');
// Return json if no parts, or we're at the end
if(parts.length == 0 || parts.first == "") {
return json;
}
// check if it is a map
if(json is Map) {
if(json.containsKey(parts.first)) {
return json_xpath(json[parts.first], '/'+parts.skip(1).join('/'));
} else {
throw "Unknown part: ${parts.first}";
}
} else {
throw "Unable to resolve path";
}
return null;
}
这样的用法:
Dynamic json = ...;
print(json_xpath(json, '/products/product'));
此致 罗伯特
答案 2 :(得分:0)
正如Günter所说,最好先将json字符串转换为地图。从路径获取映射值的函数可能与此类似:
dynamic mapValueFromPath(Map map, String path) {
List<String> parts = path.split('/');
dynamic value = map;
for (String part in parts) {
if (value is Map) {
value = value[part];
} else {
return null;
}
}
return value;
}
假设json是您在上面提出的结构的示例用法:
Map map = JSON.decode(json);
expect(mapValueFromPath(map, 'products/product/warranty'), "warranty");