有关背景,请参考这个问题:访问嵌入式 JSON 的深层对象成员 https://stackoverflow.com/q/53819904/3566998
那里提供的解决方案与键值中包含的打包 JSON 配合得很好。
但是,它们不处理 JSON 具有数组的情况。
我在另一个问题中引用的原始函数确实处理数组,但它不会处理打包的 JSON。
这是原来的函数:
function getPathValue(obj, path) {
return new Function('_', 'return _.' + path)(obj);
}
这是第一个问题的答案:
function getValue(object, path) {
return path
.split('.')
.reduce((o, k) => (typeof o === 'string' ? JSON.parse(o) : o)[k],
object);
}
同样,两者都运行良好,但都没有提供完整的包。
我需要一个能够同时完成这两个任务的解决方案,并且它必须在 IE11 的 ES5 中工作。
以下是 API 返回的 JSON 字符串示例:
{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"}]},"data":"{\"domain\":\"cooking.com\",\"id\":53819390}"}
我希望能够使用路径字符串查询值,例如:
value = getPathValue(obj, 'batters.batter[2].id');
or
value = getPathValue(obj, 'type');
or
value = getPathValue(obj, 'data.domain');