拆分 JSON 字符串的一部分以反序列化
Posted
技术标签:
【中文标题】拆分 JSON 字符串的一部分以反序列化【英文标题】:Splitting a part of a JSON string to deserialize 【发布时间】:2018-01-27 05:59:13 【问题描述】:我有一个不想完全反序列化的 JSON 字符串。我只想反序列化 JSON 字符串中的内容。
这就是字符串的样子:
"\"content\":\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1,\"status\":200,\"id\":\"test\",\"method\":\"accounts_login\""
我只需要内容对象。所以我需要制作一个 Regex(?) 可以把这个字符串变成:
"\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1"
最好的方法是什么?
【问题讨论】:
最好的方法是反序列化整个东西,然后只使用你需要的部分。 为什么不直接使用 Newtonsoft.Json 并反序列化所有内容,只使用您需要的内容? 【参考方案1】:您可以使用 Newtonsoft.Json 做到这一点,就像
var json = "\'content\':\'token\':\'*************************\',\'is_verified\':1,\'account_id\':45087,\'is_starter\':0,\'days_left\':1,\'status\':200,\'id\':\'test\',\'method\':\'accounts_login\'";
var jToken = JToken.Parse(json);
var contentToken = jToken["content"]; //This selects the Json-Node
var content = contentToken.ToObject<YourContentClass>();
【讨论】:
【参考方案2】:在我看来,最好的方法是在数据层级别反序列化整个 JSON 字符串。并且,反序列化为一个对象后,从另一个层的对象中选择你需要的数据:业务层。
如何将 JSON 字符串反序列化为对象在本主题中进行了说明:Deserialize JSON with C#
public class Rootobject
public Content content get; set;
public int status get; set;
public string id get; set;
public string method get; set;
public class Content
public string token get; set;
public int is_verified get; set;
public int account_id get; set;
public int is_starter get; set;
public int days_left get; set;
class Program
static void Main(string[] args)
string json =
"\"content\":\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1,\"status\":200,\"id\":\"test\",\"method\":\"accounts_login\"";
Rootobject rootobject = new javascriptSerializer().Deserialize<Rootobject>(json);
Content content = rootobject.content; // Select what you need
System.Console.ReadKey();
【讨论】:
以上是关于拆分 JSON 字符串的一部分以反序列化的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让 Spring Boot 反序列化以反序列化测试中的对象?
2038 年问题仍然发生在 Java 8 中日期反序列化的杰克逊身上 [重复]