问题标签 [json-deserialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
279466 浏览

json - JSON中的反序列化和序列化是什么?

我已经看到了使用 JSON 的术语“反序列化”和“序列化”。他们的意思是什么?

0 投票
7 回答
32359 浏览

c# - 有时是数组有时是对象时反序列化JSON

我在使用 JSON.NET 库反序列化从 Facebook 返回的数据时遇到了一些麻烦。

从一个简单的墙贴返回的 JSON 如下所示:

为照片返回的 JSON 如下所示:

一切都很好,我没有问题。我现在遇到了一个来自移动客户端的简单墙贴,其中包含以下 JSON,并且反序列化现在失败了,这一个帖子:

这是我反序列化的类:

如果不使用 FacebookMediaJsonConverter,我会收到错误消息:无法将 JSON 对象反序列化为类型“System.Collections.Generic.List`1[FacebookMedia]”。这是有道理的,因为在 JSON 中,Media 不是一个集合。

我发现这篇文章描述了一个类似的问题,所以我试图走这条路:反序列化 JSON,有时值是一个数组,有时是“”(空白字符串)

我的转换器看起来像:

这工作正常,除了我现在得到一个新的例外:

在 JsonSerializerInternalReader.cs 内部,CreateValueInternal():反序列化对象时出现意外令牌:PropertyName

reader.Value 的值是“永久链接”。我可以在 switch 中清楚地看到 JsonToken.PropertyName 没有案例。

我需要在转换器中做一些不同的事情吗?谢谢你的帮助。

0 投票
32 回答
458751 浏览

php - 在 PHP 中检查字符串是否为 JSON 的最快方法?

我需要一种非常非常快速的方法来检查字符串是否为 JSON。我觉得这不是最好的方法:

有没有性能爱好者想要改进这种方法?

0 投票
4 回答
15616 浏览

java - GSON 不区分大小写的枚举反序列化

我有一个枚举:

还有一些 JSON:

还有一个类:

当我尝试使用 GSON 反序列化 JSON 时,我收到nullEventtype 字段,因为 JSON 中 type 字段的大小写与枚举的大小写不匹配。

如果我将枚举更改为以下内容,则一切正常:

但是,我想将枚举常量全部保留为大写。

我假设我需要编写一个适配器,但没有找到任何好的文档或示例。

什么是最好的解决方案?


编辑:

我能够让 JsonDeserializer 工作。有没有更通用的方法来编写它,因为每次枚举值和 JSON 字符串之间的大小写不匹配时都必须编写它是很不幸的。

0 投票
5 回答
211117 浏览

java - 无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING

我有一个用 Jersey 构建并部署在 AppEngine 中的 REST 服务。application/jsonREST 服务实现了使用媒体类型的动词 PUT 。数据绑定由 Jackson 执行。

动词使用以 JSON 表示的企业-部门关系

在客户端,我使用 gson 将 JSON 表示形式转换为 java 对象。然后,我将对象传递给我的 REST 服务,它工作正常。

问题:

当我的 JSON 表示在集合中只有一项时

服务无法反序列化对象。

正如其他用户所报告的那样,解决方案是添加标志ACCEPT_SINGLE_VALUE_AS_ARRAY(例如,Jersey: Can not deserialize instance of ArrayList out of String)。尽管如此,我并没有控制它,ObjectMapper因为在服务方面它是由杰克逊透明地制作的。

问题:

有没有办法ObjectMapper在服务端配置启用ACCEPT_SINGLE_VALUE_AS_ARRAY?注释?web.xml?

代码详情

Java 对象:

REST 服务端:

客户端:

0 投票
2 回答
3548 浏览

c# - 如何使用 JSON.NET 处理有时是对象、有时是对象数组的值?

我注意到这个问题在 stackoverflow 上还有一些其他结果,但它们似乎不起作用或含糊不清。使用最流行的结果,我把这个放在一起:

问题是当 JSON 返回并被序列化为我的一种自定义类型时,JSON 的一个位有时是一个数组,有时只是一个字符串。如果我的自定义类型有一个字符串,而 JSON 是一个数组,我会收到错误消息。如果 JSON 是一个对象并且我的自定义类型是一个数组,那么反过来也会发生同样的情况。它只是无法将其映射到属性。

我决定解决这个问题,我想覆盖这个特定属性的反序列化,如果它是一个对象,我想将它转换成一个包含 1 个对象的数组。

在我要序列化的对象中,我添加了一个 JsonConverter,我认为它会覆盖它的反序列化方式。

这个想法是自定义转换器会将单个对象转换为数组。因此,如果 JSON 是“Hello”,它会将 person 设置为包含“Hello”的 List,而不是抛出异常,说不能将字符串转换为 List。

如果它已经是一个数组,它应该不理会它。

转换器如下所示:

它不起作用。上面的代码抛出一个异常,试图反序列化单个字符串,说它不能将它转换为 if 语句中的 List(然而,'objecttype' 是一个 List)。

我正在努力理解读写方法在做什么。在 stackoverflow 的另一个答案中,它建议NotImplementedException在 read 方法中抛出一个。但如果我这样做,就会调用 read 方法并抛出异常。

我认为我在正确的轨道上,但我需要朝着正确的方向轻推。我想我对 ReadJSon 方法的作用及其参数的含义有些困惑。

我真的不明白它的反序列化值是从哪里来的,因为我没有在 Deserialize 方法调用中指定它。

我对这个有点不了解。

0 投票
5 回答
411 浏览

c# - 如何:JSON 反序列化

我一直试图找到一种在 C# 中反序列化它的方法,但不幸的是没有运气,,

如果有人可以提供帮助,我将不胜感激,这是 json 数据:

}

编辑:我改变了 json 数据

0 投票
0 回答
101 浏览

c# - 类型不可用时跳过反序列化(未引用)

我有一些 json 是通过使用 json.net 序列化在我们不再引用的 dll 中找到的类型而生成的。json 是使用TypeNameHandling.Objects设置生成的,因此它试图显式加载该类型。

现在我正在尝试反序列化该 json(它实际上嵌入在更大的 json 有效负载中,它将反序列化为Dictionary<string, object>)。因为我们不再有对所需类型的引用,所以 json.net 正在抛出JsonSerializationException. 我希望 json.net 使用空白new object()null该字典值(而不是抛出异常)。这将允许我访问字典的其余部分并继续我的快乐方式。这可能吗?

以下是序列化 json 的示例:

我希望反序列化字典看起来像这样:

0 投票
2 回答
1589 浏览

c# - Twitter API 1 to 1.1 Rss to Json Conversion--WPF Application using C#

由于 twitter 很快就要贬低 API 版本 1,我决定转换旧的应用程序以允许它与新的 1.1 API 一起使用。根据我对 1.1 的了解,我知道您必须在拨打电话之前进行身份验证,并使用 JSON 而不是 RSS 来序列化数据。该应用程序是使用 xmal 和 c# 编码的 WPF

我能够使用 LINQ to Twitter 库成功进行身份验证,但是在使用 JSON 时我迷失了。这是我用于 API v1 的代码

这是推文类的代码

我想知道是否有人可以指出我编写 JSON 等价物的正确方向。提前致谢!

0 投票
1 回答
1700 浏览

json - 为什么 JSON 反序列化在 C# 中失败?

我正在尝试使用 RunTime Version v2.0.50727 的 Newtonsoft.Json dll 反序列化字符串

版本 4.5.0.0。

目标框架 .Net Framework 2.0

到字符串:

反序列化方法调用

结果 :-

Json 格式更易读:

班级