OData возвращает массив вместо JSON - Как конвертировать?

1

Я пытался понять, как правильно получить ответ OData в Javascript в течение нескольких дней. Проблема в том, что ответ отформатирован как массив вместо JSON, поэтому функция JSON.parse(mydata) не работает с данными, которые я получаю.

Мой вопрос в два раза: Каков надлежащий способ запроса OData на отправку ответа как JSON и/или как я могу отформатировать мой текущий ответ как JSON?

Вот код, который я использую:

$.ajax({
                type: "GET",
                url: requestUri,
                dataType: "script",
                accept: "application/json",
                success: function(data, request) {
                    var jsonData = JSON.parse(data);
                },
                error: function(msg) {
                    alert(msg);
                }})

Ниже приведен пример ответа на запись data переменной с помощью console.log:

{"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}

Теги:
odata

3 ответа

0
Лучший ответ

Вы можете добавить его к переменной и получить доступ к ней именно так.

var v={"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]};
//v.value[0] is a json object
console.log(v.value[0]);

или вообще пропустить задание и получить доступ таким образом:

data.value[0]
data.value[0].Genre
data.value[0].RunTime
etc....
  • 0
    Спасибо, этот второй пример - именно то, что я искал. Вы спасатель!
2

Проблема в том, что ответ отформатирован как массив вместо JSON

Этого не может быть. Вы не можете отправить "массив" через HTTP. Вы должны каким-то образом закодировать его... например, как JSON.

jQuery будет, если вы не переопределите его с dataType параметра dataType, используйте заголовок ответа HTTP Content-Type HTTP, чтобы определить, как кодируются данные. Если это JSON, он будет разбирать JSON.

Значение data является то, что вы получите, если вы читаете сырые responseText и передал его через JSON.parse.

Поэтому просто не пытайтесь разобрать его вручную. jQuery сделал это для вас.

Пропустите шаг:

var jsonData = JSON.parse(data);

... и просто работать с data.

NB: вывод JSON.parse - это объект, массив или другой тип данных JavaScript. Данные JSON - это то, что вы получаете от JSON.stringify.

  • 0
    Стоит отметить, что ожидаемые данные находятся в data.data
  • 0
    Я понятия не имел, что изменение dataType переопределяет. Это очень помогло, спасибо!
Показать ещё 1 комментарий
0

Если ответ находится в формате OData, как показывает ваш пример, но вы хотите, чтобы он был в формате JSON, который можно проанализировать с помощью JSON.parse, добавьте $ format = json в запрос OData, если конечная точка OData поддерживает его. Я знаю, что Dynamics 365 нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню