我有一个Apache骆驼应用程序,它在其余服务和Web服务之间进行中介。 休息服务是呼叫者,Web服务是后端。 我已经取得了进展,直到可以从Web服务获得响应并将其转换为xml。 现在,我必须以特定格式(例如,加上一些其他事务和会话ID)将JSON响应发送给调用者,以从xml中提取数据。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试 devise 服务将通用 JSON 数据表示转换为 XML 数据表示。 我想到的第一个想法(我在互联网上找到的)利用了 Go 模板实用程序。
如果我有一个 JSON 数据表示,如下所示:
{
"user": {
"name": "Luca",
"surname": "Rossi"
}
}
我可以 devise 模板如下:
<xml>
<user name="{{.user.name}}" surname="{{.user.surname}}" />
</xml>
生成:
<xml>
<user name="Luca" surname="Rossi" />
</xml>
问题是: Go 需要定义一个结构,该结构声明如何编组和解组 JSON 数据表示; 但是,与此同时,我想提供模板来生成 XML 作为运行时可用的服务配置。
问题是:“有可能吗”? 我知道(感谢这个问题)我可以做这样的事情:
var anyJson map[string]interface{}
json.Unmarshal(bytes, &anyJson)
当我必须访问值时问题就来了:我会被要求做一个类型断言,比如
anyJson["id"].(string)
现在,例如,我可能能够通过 JSON 模式知道 anyJson["id"] 的类型,但我不知道是否可以进行参数类型断言,例如
anyJson["id"].(typeForIDFromJSONSchema)
当您解组为map[string]interface{}
时,每个嵌套的 JSON object 也将是map[string]interface{}
。 因此,将包含的元素类型断言到string
通常可能有效,但不适用于任何struct
类型 - 解组器将始终不知道您的结构。
所以我建议的两个选项是
我使用过 GJson 和 Jsoniter。 GJson 通过输入逐字节读取,使用缓冲来保持其速度,提供 API 允许检查当前元素和断言以转换值。
Jsoniter 在我看来就像 Java 中成功的解析器一样的更简洁的实现,但我还没有用它来以这种方式解析。 (它也可以简单地用作标准 Go encoding/json
的快速替代品。)我建议您专注于使用它的Iterator和WhatIsNext
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.