拆分 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 反序列化以反序列化测试中的对象?

反序列化json树结构并设置父项

Python Json序列化与反序列化

2038 年问题仍然发生在 Java 8 中日期反序列化的杰克逊身上 [重复]

System.Text.Json - 将嵌套对象反序列化为字符串

python接口测试之序列化与反序列化