当前位置: 首页 > 面试题库 >

如何反序列化无效的json?截断的对象列表

吴和硕
2023-03-14
问题内容

我的json文件主要是一个包含对象的数组,但是列表不完整,所以我不能使用最后一个条目。我想反序列化文件的其余部分,同时丢弃最后一个无效的条目

[ { "key" : "value1" }, { "key " : "value2"}, { "key

请告诉我是否有使用Newtonsoft.Json库的方法,还是我需要一些预处理。

谢谢!


问题答案:

您可以使用JsonReader类,并尝试尽可能地解析。类似于下面的代码,它将解析尽可能多的属性,然后引发异常。如果您想反序列化为一个具体的类,那么当然是这样。

public Partial FromJson(JsonReader reader)
{
    while (reader.Read())
    {
        // Break on EndObject
        if (reader.TokenType == JsonToken.EndObject)
            break;

        // Only look for properties
        if (reader.TokenType != JsonToken.PropertyName)
            continue;

        switch ((string) reader.Value)
        {
            case "Id":
                reader.Read();
                Id = Convert.ToInt16(reader.Value);
                break;

            case "Name":
                reader.Read();
                Name = Convert.ToString(reader.Value);
                break;

        }
    }

    return this;
}

从CGbR JSON Target获取的代码。



 类似资料:
  • 我试图获取我的Web请求JSON输出并解析它。这是输出 我为这些结果创建了公共课程 当我尝试反序列化Record类并选择名称时,我从RootObject类获得名称。这是我的密码

  • 问题内容: Eclipse JDT编译器似乎存在一个问题,在某些情况下,Java 8 lamda不能正确反序列化,而是抛出。我正在使用最新发布的维护版本,如下所示: 现有的Bug / SO条目报告了已(至少部分地)已解决的类似问题。我已经亲自验证以下问题已解决。 访问实例字段和方法的Java 8Lambda不能反序列化 https://bugs.eclipse.org/bugs/show_bug.

  • 问题内容: 我正在使用dart包json_serializable进行json序列化。查看flutter文档,它显示了如何反序列化单个对象,如下所示: 但是,我对dart不够熟悉,无法弄清楚如何对项目列表而不是单个实例执行相同的操作。 问题答案: 好吧,您的服务将处理作为地图的响应正文,或相应地处理地图列表。根据您所拥有的代码,您要核算1件商品。 如果响应主体是可迭代的,那么,如果我正确理解了您的

  • 问题内容: 我有一个具有以下结构的JSON请求: 现在,res-150p在C#中说了无效的名称,如果我给它起了另一个名字,那么在进行反序列化时我没有得到任何值,res-150p内为空。 编辑: [可序列化] 是包含然后包含的根对象 问题答案: 您必须用属性来修饰属性,以告诉它如果名称不完全匹配该怎么办: 另请参见使用JsonConvert.DeserializeObject将Json反序列化为C#

  • 问题内容: 我正在寻找一种在Swift中自动序列化和反序列化类实例的方法。假设我们定义了以下类…… …和实例: 的JSON表示形式如下: 现在,这是我的问题: 我如何序列化实例并获取上面的JSON,而不必手动将类的所有属性添加到变成JSON的字典中? 我如何反序列化上面的JSON并获取静态类型为类型的实例化对象?同样,我不想手动映射属性。 这是使用Json.NET在C#中执行此操作的方法: 问题答

  • 问题内容: 我有一堂课POJO 我有一个像 我正在使用Jackson ObjectMapper进行反序列化。在不创建任何其他父类的情况下如何获得? 如果不可能,是否有可能获得仅包含json字符串的第一个元素的对象,即在这种情况下和? 问题答案: 您首先需要获取数组 打印(带有)