Извлечь таблицу JSON из строкового элемента JSON

Я получаю этот JSON в ответ от сервера:

{
   "tab":[
      "[[\"2018\",11,\"19\",\"16\",\"13\"],null,null,null,null,null,\"40\"]",
      "[[\"2018\",11,\"19\",\"16\",\"19\"],null,null,null,null,null,\"56\"]",
      "[[\"2018\",11,\"19\",\"16\",\"21\"],null,null,null,null,\"57\",null]"
   ]
}

Я знаю, что могу получить первый элемент таблицы tab, возвращаемый с помощью $.tab[1]. Возвращаемый элемент — это строка, содержащая таблицу — первый элемент этой таблицы — это другая таблица, содержащая дату. Вопрос в том, какое выражение пути JSON следует использовать для извлечения значения года из внутренней таблицы или одного из этих чисел в конце (40, 56, 57)?


person WojtusJ    schedule 19.12.2018    source источник
comment
числа, которые вы пытаетесь извлечь, перемещаются?   -  person sbattou    schedule 19.12.2018
comment
Вы хотите извлечь год или числа? Потому что year value or one of those numbers at the end на самом деле не конкретно.   -  person Islam Elshobokshy    schedule 19.12.2018
comment
Нет, они не двигаются, это просто пример. И мне нужны оба, этот год и нуберы в конце внешней таблицы. Я просто не знаю, какое выражение пути JSON следует использовать, чтобы получить что-то из этой строки, содержащей другую таблицу.   -  person WojtusJ    schedule 19.12.2018
comment
$.tab[1] возвращает второй элемент...   -  person Teemu    schedule 19.12.2018
comment
Правильно, моя ошибка - это второй элемент. Но это не моя проблема.   -  person WojtusJ    schedule 19.12.2018


Ответы (1)


Я не уверен, что вы имеете в виду, когда говорите, что можете получить первый элемент с помощью $.tab[1]. Вы используете jQuery? Даже так, кажется, это не имеет никакого смысла. Несмотря на это, вы можете анализировать эти внутренние таблицы и обращаться к ним как к массивам:

var results = {
   "tab":[
      "[[\"2018\",11,\"19\",\"16\",\"13\"],null,null,null,null,null,\"40\"]",
      "[[\"2018\",11,\"19\",\"16\",\"19\"],null,null,null,null,null,\"56\"]",
      "[[\"2018\",11,\"19\",\"16\",\"21\"],null,null,null,null,\"57\",null]"
   ]
};

// you can refactor this as a method for more convenient usage, this is just a demo
var row = JSON.parse(results.tab[0]);

// now you just have a multi-dimensional array, use it as normal
console.log(row[0][0]); //year
console.log(row[6]); //number

person T Nguyen    schedule 19.12.2018
comment
Я ищу выражение пути JSON, которое позволило бы мне получить значения из этой строки. Если это возможно... - person WojtusJ; 19.12.2018
comment
Обязательно ли использовать JSONPath, @WojtusJ? - person T Nguyen; 19.12.2018
comment
Да, мне нужно использовать его в программном обеспечении, которое позволяет мне применять выражение пути JSON только к ответу, который я получаю от сервера. Использование любого другого вида обработки, например JavaScript, значительно усложнило бы обработку. - person WojtusJ; 19.12.2018
comment
В этом случае я действительно не вижу хорошего решения. JSONPath видит только структуры JSON, и вам, по сути, нужно взять значение элемента JSON и проанализировать его, чего JSONPath сделать не может. Все, что он видит, это строка. Вам понадобится некоторый уровень постобработки. - person T Nguyen; 19.12.2018
comment
Я нашел довольно простой способ использовать фрагмент кода JS в своем решении, и ваш код помог. Огромное спасибо! - person WojtusJ; 20.12.2018