【问题标题】:How to parse JSON of two float arrays into two lists?如何将两个浮点数组的 JSON 解析为两个列表?
【发布时间】:2019-09-29 22:00:00
【问题描述】:

我有一个 JSON,我将它发布到我的 WebAPI C# 应用程序。 我需要进一步处理这个 JSON 并将其中的数据保存到数据库表中。 JSON 看起来像这样,并且包含纬度和经度:

{
  "lattitudes": [
    48.75608,
    48.75608,
    48.75608,
    48.75608,
    48.75608,
],
  "longitudes": [
    48.75608,
    2.302038,
    48.75608,
    48.75608,
    48.75608,
  ]
}

请注意,JSON 包含 两个数字数组,而不是一个对象数组,每个对象具有 2 个属性。

我想做的是将这些“纬度”和“经度”数组写入列表/数组,然后使用 SQL“INSERT”语句对它们进行 foreach(我知道 - 这是非常讨厌的做法,但我不能不知道什么更聪明)。

如何将此 JSON 反序列化为两个 List<T> 列表,以便按照所述进行进一步处理?

【问题讨论】:

  • 我不完全确定您的问题是什么。是 1) 反序列化第一个 JSON 样本吗? 2) 将第一个 JSON 样本翻译成第二个? 3)将第一个样本翻译成对数组? 4) 将第一个样本转换为一对数组,然后编写 SQL 查询以插入数据库?堆栈溢出约定是问one question per post所以尽量不要合并无关的请求。
  • 正是您列出的 1) 问题。要将第一个 JSON 示例反序列化为两个列表,1JSONarray -> List no。 1, 2JSONArray -> 列表号 2
  • 假设经度和纬度的位置相互关联(即第二个纬度与第二个经度配对),那么我不明白你为什么不只是循环通过它们匹配他们起来。你遇到的实际问题是什么?如果您想将它们插入 SQL 中,我认为您将它们保存在 2 个单独的列表中,这会让您的生活变得艰难,但任何一种方式都是可行的。
  • @KamilTurowski - 根据您的评论,我试图简化您的问题。如果我过于简单,请随时恢复。
  • Ben,问题在于微处理器必须为实际的 JSON 文件“预订”内存。我发现使用两个列表的方式对内存性能更好。我知道这个 JSON 看起来很糟糕,但我更喜欢它而不是在 uC 上玩动态创建。 @dbc,感谢您的简化,现在很完美;)

标签: c# json list parsing


【解决方案1】:

要将第一个 JSON 样本反序列化为纬度/经度对数组,您可以:

  1. 使用How to auto-generate a C# class file from a JSON object string 中提到的代码生成工具之一来生成相应的数据模型。 http://json2csharp.com/ 是一种选择。
  2. 使用 How do I turn a C# object into a JSON string in .NET? 中提到的 JSON 序列化程序之一将 JSON 反序列化为您的数据模型。 是目前最受欢迎的。
  3. 使用Enumerable.Zip 将数组组合成对。

因此,如果我们定义如下数据模型:

public class RootObject
{
    public List<double> lattitudes { get; set; }
    public List<double> longitudes { get; set; }
}

public class LatLong
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

我们可以按如下方式反序列化您的 JSON:

var root = JsonConvert.DeserializeObject<RootObject>(jsonString);

var array = root.lattitudes
    .Zip(root.longitudes, (lat, @long) => new LatLong { Latitude = lat, Longitude = @long })
    .ToArray();

演示小提琴here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多