解析JSON文件并将数据插入SQL server

本文关键字:插入 SQL server 数据 JSON 文件 解析 | 更新日期: 2023-09-27 17:51:16

我有以下JSON对象,并试图创建INSERT查询。创建和插入数据到数据库的最佳方法是什么?我使用JSON。. NET解析文件。谢谢大家的建议。

JsonTextReader reader = new JsonTextReader(new StringReader(json));
while (reader.Read())
{
    if(reader.Value != null)
    Console.WriteLine("Field: {0}, Value: {1}", reader.TokenType, reader.Value);
}

我的JSON是这样的

{
  "persons": {
    "person": {
      "i_date":  "2014-03-20", 
      "i_location": "test", 
      "i_summary": "test test" 
    },
    "people": {
      "people1": {
        "first_name": "first name test1", 
        "last_name": "last name test1"  
      },
      "people2": {
        "first_name": "first name test2", 
        "last_name": "last name test2" 
      }, 
      "people3": {
        "first_name": "first name test3", 
        "last_name": "last name test3" 
      }
    }
  }
}

解析JSON文件并将数据插入SQL server

首先,我将重构JSON,使其更有意义。你说一个"人"可以有多个"人",所以这样组织它。一个"人"有三个属性(即i_date、i_location和i_summary)和一个人的集合。

{
  "person":{
    "i_date":"2014-03-20",
    "i_location":"test",
    "i_summary":"test test",
    "people":[
      {
        "first_name":"first name test1",
        "last_name":"last name test1"
      },
      {
        "first_name":"first name test2",
        "last_name":"last name test2"
      },
      {
        "first_name": "first name test3",
        "last_name":"last name test3"
      }
    ]
  }
}

现在你可以声明一些。net类来表示这个结构。

public class Person2
{
    public string first_name { get; set; }
    public string last_name { get; set; }
}
public class Person
{
    public string i_date { get; set; }
    public string i_location { get; set; }
    public string i_summary { get; set; }
    public List<Person2> people { get; set; }
}
public class RootObject
{
    public Person person { get; set; }
}

最后,使用JsonConvert。DeserializeObject获取一组对象实例

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

您现在可以遍历附加到"person"的"people"并对其进行操作。

Console.WriteLine( root.person.i_date );
Console.WriteLine( root.person.i_location );
Console.WriteLine( root.person.i_summary );
foreach(var p in root.person.people)
{
    Console.WriteLine( p.first_name );
    Console.WriteLine( p.last_name );
}

此时,您可以使用ADO。.NET或实体框架将对象中的值传输到SQL参数(ADO.NET)或EF类中以将其持久化到数据库中。