#c# #json #json.net
#c# #json #json.net
Вопрос:
Сообщество,
Я хочу прочитать все значения из этого json. Я использую C #. Как мне это сделать? Я пытаюсь использовать матрицу расстояния обслуживания openroute. Моя идея:
string responseData = await response.Content.ReadAsStringAsync();
var jobject = JObject.Parse(responseData);
var onlydistance = jobject.SelectTokens("$.distances[*]")
.Values<double>()
.ToArray();
Мой JSON:
{
"distances": [[0, 108628.26, 2669713, 11595025], [108952.97, 0, 2674477.75, 11609762], [2688555, 2681139.5, 0, 8405009], [11596626, 11611808, 8734262, 0]],
"destinations": [
{
"location": [9.700817, 48.476406],
"snapped_distance": 118.92
},
{
"location": [9.207773, 49.153882],
"snapped_distance": 10.54
},
{
"location": [37.572963, 55.801279],
"snapped_distance": 17.45
},
{
"location": [115.665017, 38.100717],
"snapped_distance": 648.79
}
],
"sources": [
{
"location": [9.700817, 48.476406],
"snapped_distance": 118.92
},
{
"location": [9.207773, 49.153882],
"snapped_distance": 10.54
},
{
"location": [37.572963, 55.801279],
"snapped_distance": 17.45
},
{
"location": [115.665017, 38.100717],
"snapped_distance": 648.79
}
],
"metadata":
{
"attribution": "openrouteservice.org | OpenStreetMap contributors",
"service": "matrix",
"timestamp": 1603348601609,
"query":
{
"locations": [[9.70093, 48.477473], [9.207916, 49.153868], [37.573242, 55.801281], [115.663757, 38.106467]],
"profile": "cycling-road",
"responseType": "json",
"metricsStrings": ["DISTANCE"],
"metrics": ["distance"],
"units": "m"
},
"engine":
{
"version": "6.3.0",
"build_date": "2020-10-19T02:01:48Z",
"graph_date": "2020-10-12T06:58:07Z"
}
}
}
Комментарии:
1. Я думаю, что «сохранить» — не лучшее слово. Похоже, вы хотите извлечь все значения из массивов в массиве расстояний.
2. Пожалуйста, добавьте свой JSON в вопрос в виде текста, а не в виде изображения — кстати, это не JSON.
3. Вы пробовали свою идею? это сработало? что не сработало?
4. Не могли бы вы также ответить на вопросы Лиама, пожалуйста?
5. @Йохем Ван Хеспен Ну, я прочитал ваш комментарий лишь частично: часто кто-то предлагает использовать Visual Studio
Paste Special -> Paste JSON as classes
. Я имел в виду этот инструмент. Я не уверен, что предложение Visual Studio Code применимо здесь.
Ответ №1:
Используйте генератор / конвертер для создания классов Json, например: https://json2csharp.com /
Пример кода:
public Form1()
{
InitializeComponent();
string jsonData = File.ReadAllText(@"c:roott01.json");
Root root = JsonConvert.DeserializeObject<Root>(jsonData);
}
public class Root {
public List<List<double>> distances { get; set; }
public List<Destination> destinations { get; set; }
public List<Source> sources { get; set; }
public Metadata metadata { get; set; }
}
public class Destination {
public List<double> location { get; set; }
public double snapped_distance { get; set; }
}
public class Source {
public List<double> location { get; set; }
public double snapped_distance { get; set; }
}
public class Query {
public List<List<double>> locations { get; set; }
public string profile { get; set; }
public string responseType { get; set; }
public List<string> metricsStrings { get; set; }
public List<string> metrics { get; set; }
public string units { get; set; }
}
public class Engine {
public string version { get; set; }
public DateTime build_date { get; set; }
public DateTime graph_date { get; set; }
}
public class Metadata {
public string attribution { get; set; }
public string service { get; set; }
public long timestamp { get; set; }
public Query query { get; set; }
public Engine engine { get; set; }
}