Не получается разобрать JSON в MVC

148
28 июня 2018, 15:20

Имею в Controllers метод который обращается к стороннему API , хочу оттуда взять json

        public ActionResult JsonOrdersData(string id) 
    {
        HttpClient client = new HttpClient();
        string URI = "http://api.openweathermap.org/data/2.5/weather?q=Kiev&appid=d418fa94e9487d29a342856a759b463e";
        HttpResponseMessage response = client.GetAsync(URI).Result;
        response.EnsureSuccessStatusCode();
        var responseBody = response.Content.ReadAsStringAsync().Result;
        Console.WriteLine(response);
        Console.WriteLine(responseBody);
        //return Json(data, JsonRequestBehavior.AllowGet);
        return Json(responseBody, JsonRequestBehavior.AllowGet);
    }

и отобразить полученные данные во View

<script type="text/javascript">
function ParseResponse(data) {
    var target = $("#tabledata");
    target.empty();
    for (var i = 0; i < 4/*data.length*/; i++) {
        target.append("<tr><td>" + data.Id + "</td><td>"
            + data.Status + "</td><td>"
            + data.coord + "</td><td>"
            + data.name + "</td></tr>");
    }
}

но не получается ,т.к data в js в таком виде "{\"coord\":{\"lon\":30.52,\"lat\":50.43},\"weather\":[{\"id\":800,\"main\":\"Clear\",\"description\":\"clear sky\",\"icon\":\"01d\"}],\"base\":\"stations\",\"main\":{\"temp\":300.15,\"pressure\":1002,\"humidity\":39,\"temp_min\":300.15,\"temp_max\":300.15},\"visibility\":10000,\"wind\":{\"speed\":8,\"deg\":280,\"gust\":14},\"clouds\":{\"all\":0},\"dt\":1528188060,\"sys\":{\"type\":1,\"id\":7358,\"message\":0.0023,\"country\":\"UA\",\"sunrise\":1528163343,\"sunset\":1528221863},\"id\":703448,\"name\":\"Kiev\",\"cod\":200}" и вывести я могу только data в виде строки . Как мне получить именно JSON , чтобы я мог обращаться к его свойствам : coord, lon , Lat и т.д?

Answer 1

Может вам как раз не JSON нужен (который в виде строковых данных), а JS-объект?

По сути, котроллер у вас возвращает string. Метод Json() сериализует .NET-объект (который сейчас имеет тип string) в JSON. Выходит, есть два варианта:

  1. спарсить ответ в контроллере и опять сериализовать его в JsonResult
  2. передавать данные как обычную строку, которую спарсить уже на клиенте JSON.parse(data).
READ ALSO
В userscript не срабатывает функция jQuery load()

В userscript не срабатывает функция jQuery load()

Пытаюсь создать свой первый userscript (Chrome + Violentmonkey)

186
Защита от флуда на JS

Защита от флуда на JS

пишу на телеграмм ботаХочу реализовать функцию защита от флуда

165
Как заполнить поля формы данными из массива?

Как заполнить поля формы данными из массива?

Есть форма и массивКак сделать, чтобы по щелчку по кнопке заполнилась форма соответственно ключам?

174