Для справки, пожалуйста, обратитесь к этому вопросу: Доступ к глубокому объекту-члену встраиваемого JSON
Предлагаемые там решения очень хорошо работали с упакованным JSON, содержащимся в ключевых значениях.
Однако они не обрабатывают ситуацию, когда JSON имеет массивы.
Исходная функция, на которую я ссылался в другом вопросе, обрабатывает массивы DID, но она не будет обрабатывать упакованный 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);
}
Опять же, оба работают хорошо, но ни один не предлагает весь пакет.
Мне нужно решение, которое будет выполнять обе задачи, и оно должно работать в ES5 IE11.
Вот пример возвращаемой строки JSON API:
{"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');
или
value = getPathValue(obj, 'type');
или
value = getPathValue(obj, 'data.domain');