问题标签 [json-view]

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 投票
1 回答
321 浏览

json - 如何在不定义内部模板的情况下使用 Grails JSON 视图?

我有一个域类:

我有以下 JSON 模板:

index.gson:为对象列表生成 JSON

_business.gson:为业务对象生成 JSON

index.gson

_business.gson

如何在不使用 _business.gson 模板的情况下为业务对象生成 JSON?

我想采用一种只有 index.gson 并手动渲染内部对象的方法。

0 投票
1 回答
1296 浏览

java - @JsonView:不同的观点

我正在编写一个 Spring Web 服务,默认使用 Jackson。我正在使用@JsonView 来指示我需要将哪个属性解析为我的 JSON 对象。所以,问题是:许多对象在不同的​​类中使用,但并非完全是它的所有属性,例如:

如果我需要两个以上的“观点”,我必须创建更多的接口/类来做到这一点?(如 Views.Professor、Views.Principal、...)这是一个真正的好习惯吗?

我想听听一些建议或替代方案来解决这个问题。我对走在正确的轨道上有点困惑。

0 投票
2 回答
1140 浏览

java - 读取大型 JSON 文件内存不足

我有一个 121MB 的大型 JSON 文件。我想阅读它的结构和数据。我无法使用notepad++和chrome的json编辑器插件阅读它。我试过用java阅读它。简单的 json 读取也给出了异常:

线程“主”java.lang.OutOfMemoryError 中的异常:超出 GC 开销限制

如果我使用杰克逊流媒体 API。如何完整读取结构和数据?我不知道它的 json 结构键和值。我使用这样的代码:

有没有办法用任何文本或 JSON 查看器来阅读它?或使用java代码?如果是java代码,如何读取JSON结构?

0 投票
1 回答
1912 浏览

javascript - 你能推荐任何在线 JSON 网格查看器或表格查看器吗?

我查看了许多在线 JSON 查看器,但在以表格格式显示 JSON 数组方面,它们都不是很好。知道的请推荐。

0 投票
1 回答
1749 浏览

json - 我如何拥有多个 JsonView 继承

我在Java SpringBoot 1.5.7中有一个场景,我有多个类,我希望能够通过继承对每个类应用不同的 JsonView。

Class A 是 Class B 中的一个属性,ClassB 只有在使用 ClassB 的 DetailView JsonView 时才应该序列化为 Json。

B 类也是 C 类的属性。

在我的现实生活场景中,我最多需要 5 级继承。在我的休息控制器中,我想使用不同的视图。当我使用ClassC.DetailView.class视图时,JsonView 只使用直接类,即ClassCClassB,但ClassA 属性不包含在生成的 Json 中。结果是:

我还尝试将最外层的 JsonView 类放在最内层的类中,即。在ClassA 属性中有@JsonView(ClassC.DetailView.class)但它也不起作用。

我想要的结果是:

我如何让这个工作?

0 投票
2 回答
702 浏览

rest - 如何让 Json Api 渲染与 Grails v3.3.3 中的 json 视图一起使用

我有一个简单的问题,文档并没有帮助我解决它。

我创建了一个 Grails v3.3.3 演示项目 - 并创建了一个名为 JsonApiBook 的简单域类,具有像这样的“名称”属性

并标记了 URI,因为文档说 JSON API 渲染仅适用于域类(而不是控制器类)。

在我的引导程序中,我已将 book 的实例保存到表中 - 并且可以普遍查看。

在我的视图目录中,我创建了一个 jsonApiBook 文件夹并创建了两个 gson 文件。

像这样的“_jsonApIBook”模板

它调用 jsonapi 辅助对象来呈现实例。

我在同一个目录中创建了一个 index.json,如下所示:

当我运行应用程序并使用邮递员或浏览器进行渲染时,我会得到一个结果,但它的 Json api 兼容(我认为它被忽略了模板)。

所以 localhost:8080/jsonApiBook 只是返回(看起来是默认布局):

和 localhost:8080/jsonApiBook/1 只返回'null',这是不对的。

我应该如何设置 json 视图以呈现符合 JSON API 的输出?因为这似乎无法正常工作。

0 投票
0 回答
434 浏览

grails - 使用 JsonViews 1.2.7 的 Grails 3.3.3 忽略了我的 index.gson、show.gson

我正在努力获取 JSON API,并为域类渲染 json。我正在使用 Grails v3.3.3 和 JsonViews 1.2.7

如果我使用 @Resource 注释公开域类,则会自动生成控制器和“默认”json 输出。

但是,我想对正在发生的事情进行一些控制,所以我有另一个域类(客户和我的演示应用程序中的站点,其中客户有许多站点)。

我不在这些域类中使用 @Resource 注释。

我手动创建了两个名为 CustomerRestController 和 SiteRestController 的控制器 - 并使用 UrlMappings 来公开 URI。(一个使用“(资源:控制器)”形式,另一个使用声明的显式控制器和操作:

因此,让我们首先看看 SiteRestController 发生了什么(使用简单的调试 println 来显示它正在控制台中被调用)。我使用了 GORM 数据服务模型,只是在服务中定义了一个接口,让 Grails 自动构建 serviceImpl,然后将其注入控制器。我已将响应格式声明为 [json]

我手动创建了 /views/site/_site.gson、index.gson 和 show.gson

为了显示该视图被忽略,我编辑了 show.gson 如下

和 index.gson 视图为

因此,当我启动应用程序并调用“/api/sites”网址时,我得到了这个。这只是一个标准渲染,不使用 _site.gson - 并忽略了我的 index.gson

如果我调用 '/api/sites/1' 我得到以下信息(这显然调用了 _sites.gson 模板,但我的 'show.gson' 被修改为不使用模板,这显然被忽略了)

我还尝试从这样的客户视图模板中进行深度渲染

在查询 /api/customers/1 时,它会忽略我的网站关于深度渲染的详细信息。请注意,该站点仅显示默认 ID,并且似乎没有调用 _site.gson:

所以我不明白这里发生了什么。Grails 有自己的内部生成的默认值,并且忽略了我提供的视图等,并且在请求时似乎没有进行深度渲染。

有人会建议为什么我的视图/模板没有按预期调用吗?

0 投票
1 回答
817 浏览

grails - grails v3.3.3,json views 1.2.7:在对父对象进行深度渲染时出现堆栈溢出

使用 json 视图深度渲染域对象时出现堆栈溢出。

我创建了一个客户域对象和站点域对象,其中客户有许多站点。

我在 bootsrap 中创建了两个客户和一个站点,并将该站点分配给了第一个客户。

我已经使用 gorm 数据服务从接口创建了一个 customerService 实例。

根据 json 视图文档(第 2.5.2 节),我保证当我在控制器上使用索引操作时,我会为站点执行连接获取,并确保我在一个休眠会话中拥有客户列表和站点以传递给看法。

在调用 'json g.render (customer, [deep:true])' 的 _customerRest.gson 视图中。我有一个 _siteRest.gson 模板用于站点域对象/控制器配对(这有效 - 当我只使用休息来获取站点或特定站点时,它会正确呈现)

当我用 Postman 调用我的“/api/customers”uri 时,我得到一个重复的 json 输出,像这样

然后像这样的stackoverflow

如果我删除 [deep:true] 选项,我的 json 将呈现,但不会在输出中显示站点详细信息 - 只是站点 id 作为子项。

此示例项目的最新版本位于 github 上:https ://github.com/woodmawa/ttRestApi

有没有其他人遇到过这个问题,这是我的模板 gson 某处的错误吗?

PS。如果将渲染命令更改为 json g.render (customer , [expand:['sites']]) - 这似乎可以正常工作。但 [deep:true] 选项如上所示失败。

我在 CustomerRestController 中的索引操作看起来像这样,其中包含调试语句

当我查看 customerService.list 查询的结果时,我通过 fetch:[sites:"join"] 查询获得了第一个客户和他的单个站点,正如预期的那样

我的 _customerRest.gson 看起来像

和相应的站点 _siteRest.gson 看起来像这样

0 投票
0 回答
410 浏览

java - Jackson ObjectMapper 在将 POJO 读取到 JsonNode 时如何使用 JsonView

所以我有一个奇怪的问题,杰克逊的 ObjectMapper 有一个valueToTree(someObject)接受 POJO 并输出 JsonNode 的方法。但是,我拥有的对象上有一个 bajillion 字段,在执行此操作时不应序列化,通常当我想将对象序列化为字节或字符串时,这很容易通过以下方式完成:

但是,我似乎无法将 JsonView 与此 valueToTree 方法一起使用,因此我唯一的选择似乎是手动创建 json(呃)或做一些像这样的噩梦:

我在哪里双重解析 json。肯定有更好的方法,对吧?

这里有一个类似的问题,但有趣的是,作者似乎只是想要一个 JsonNode,因为 Play Framework 的ok(content)unauthorized(content)方法当时只接受 JsonNodes 还是什么?我不知道。无论如何,那里接受的答案对我没有帮助,我实际上需要一个 JsonNode 并且我需要该 JsonNode 不包含不属于我想要的 JsonView 的字段。

0 投票
1 回答
508 浏览

java - 如何在 StdSerializer Jackson 中使用 JsonView

我创建了一个序列化程序,它扩展了 StdSerializer 以将对象列表转换为 json 中的许多对象。

多亏了我的序列化程序,它才能工作。

但我不能同时使用@JsonView。Jackson 没有考虑元素内部的注释,并且 serializerProvider.getActiveView()在一次递归调用后丢失了信息。

我怎样才能解决我的问题。也许 StdSerializer 不是好的解决方案。或者我想念如何使用该方法考虑 StdSerializer 中的 JsonView