Member 12586110 Ответов: 2

Программа для вызова restful api и сохранения json документа


Привет, я работаю над вызовом метода api GET и сохранением полезной нагрузки json в виде документа json и сохранением на диске. Я могу вызвать api, но не знаю, как сохранить результаты полезной нагрузки в виде документа json. Я хотел бы сохранить результаты в виде документа json на диске C:\jsonDocs\weather.json

АПИ получить URL-адрес: http://myapi.com/v1/weatheradata?id=1[^]

полезные данные JSON:

{4 items
"message":"accurate"
"cod":"200"
"count":1
"list":[1 item
0:{11 items
"id":2643743
"name":"London"
"coord":{2 items
"lat":51.5085
"lon":-0.1257
}
"main":{6 items
"temp":291.57
"feels_like":288.33
"temp_min":290.37
"temp_max":292.59
"pressure":1024
"humidity":42
}
"dt":1595275779
"wind":{2 items
"speed":3.1
"deg":10
}
"sys":{1 item
"country":"GB"
}
"rain":NULL
"snow":NULL
"clouds":{1 item
"all":7
}
"weather":[1 item
0:{4 items
"id":800
"main":"Clear"
"description":"clear sky"
"icon":"01n"
}
]
}
]
}


Что я уже пробовал:

Я использую приведенный ниже код.

string json = string.Empty;
string cities;
cities = getCities();

JavaScriptSerializer oJS = new JavaScriptSerializer
{
    MaxJsonLength = Int32.MaxValue
};

json = oJS.Serialize(cities.ToList());
using (StreamWriter sw = new StreamWriter(File.Create(@"C:\temp\cities.json")))
{
    sw.Write(json);
}


Это не создает никакой ошибки, но документ json пуст.

F-ES Sitecore

Google how to get the response from HttpWebResponse, а затем google how to save a stream to a text file. Все это очень хорошо задокументировано.

2 Ответов

Рейтинг:
1

Richard MacCutchan

Данные, которые у вас есть, уже близки к правильному JSON-файлу, но вам нужно удалить все строки "x item(s)" :

{4 items // these strings need to be removed
    "message":"accurate"
    "cod":"200"
    "count":1
    "list":[1 item
        0:{11 items
            "id":2643743
            "name":"London"
            "coord":{2 items
                "lat":51.5085
                "lon":-0.1257
            }
            "main":{6 items
                "temp":291.57
                "feels_like":288.33
                "temp_min":290.37
                "temp_max":292.59
                "pressure":1024
                "humidity":42
            }
            "dt":1595275779
            "wind":{2 items
                "speed":3.1
                "deg":10
            }
            "sys":{1 item
                "country":"GB"
            }
            "rain":NULL
            "snow":NULL
            "clouds":{1 item
                "all":7
            }
            "weather":[1 item
                0:{4 items
                    "id":800
                    "main":"Clear"
                    "description":"clear sky"
                    "icon":"01n"
                }
            ]
        }
    ]
}

Я добавил отступы, чтобы вы могли видеть различные части данных. Но так как это уже в формате JSON, вам просто нужно использовать TextWriter, чтобы записать его в файл. Что вы будете с ним делать после этого-непонятно.


Member 12586110

Привет, Ричард Маккатчан, Спасибо за ваш ответ. Например, я хотел бы сохранить документ json на диск "C:\jsonDocs\weather.json"

Richard MacCutchan

Так в чем же проблема при записи большого количества строк текста в файл?

Member 12586110

Привет, Ричард, изменил свой вопрос соответствующим образом, я использую JavaScriptSerializer. Полезная нагрузка api-это json. Я десериализуюсь и сериализуюсь, есть ли гладкий способ сделать это.

City[] Cities = oJS.Десериализовать<city[]>(города);

json = oJS.Serialize(города);

Richard MacCutchan

Почему вы десериализуете его только для того, чтобы снова сериализовать? У вас есть необработанный текст JSON из вашего сервиса RESTful, так что вы можете просто записать его в свой текстовый файл прямо сейчас.

Member 12586110

Привет, Ричард, я пытался, но не смог заставить его написать необработанный файл.

Richard MacCutchan

Пробовал что? Пожалуйста, используйте Улучшить вопрос ссылка выше и показать нам код, который вы пробовали, и объяснить, что произошло.

Member 12586110

Привет, Ричард, внес изменения в код. Я тоже попробовал нижеследующее, но безуспешно.

Список<Объект> У buildingslist = новый список<объект&ГТ;();

формат JSON = ОАО.Сериализовать(buildingslist);

Спасибо.

Richard MacCutchan

Так что же случилось? Вы не можете ожидать, что мы догадаемся, что вы имеете в виду. - не повезло" Пожалуйста, подумайте о том, что ваш код пытается сделать, и объясните это должным образом подробно, включая то, какие результаты вы ожидаете, какие результаты вы видите, а также любые сообщения об ошибках или исключения.

Member 12586110

Привет, Ричард, документ json пуст без ошибок. Если переключить код обратно на десериализацию и сериализацию, это сработает.

City[] Cities = oJS.Десериализовать<city[]>(города);
json = oJS.Serialize(города);

Richard MacCutchan

Ну, я думаю, вы не читали мой предыдущий ответ.

Рейтинг:
0

Mike Hankey

Используйте NewtonSoft и сериализуйте файл. Видеть Сериализация JSON в файл[^]


Member 12586110

Привет, Майк Хэнки, большое спасибо за ваш ответ. Можем ли мы сделать то же самое с помощью библиотек microsoft?

С уважением

Mike Hankey

NewtonSoft-это очень стабильная утилита, и она очень популярна. Вы можете использовать Диспетчер пакетов NuGet для загрузки его в свое приложение. Что касается утилит uSoft JSON, то я ими не пользуюсь, потому что NewtonSoft намного лучше. Я не знаю, есть ли у uSoft подобная функциональность.

Member 12586110

Конечно. Спасибо.