gpt4 book ai didi

json - 通过模板将通用JSON转换为XML

转载 作者:行者123 更新时间:2023-12-03 10:09:09 25 4
gpt4 key购买 nike

我正在尝试设计一种将通用JSON数据表示形式转换为XML数据表示形式的服务。
我想到的第一个想法(也是我在Internet上找到的)利用了Go模板实用程序。
如果我有如下所示的JSON数据表示形式:

{
"user": {
"name": "Luca",
"surname": "Rossi"
}
}
我可以设计一个如下模板:
<xml>
<user name="{{.user.name}}" surname="{{.user.surname}}" />
</xml>
产生:
<xml>
<user name="Luca" surname="Rossi" />
</xml>
问题是:Go需要定义一个结构体,该结构体声明如何编码(marshal)和取消编码(marshal)JSON数据表示形式。但是,同时,我想提供模板以在运行时生成XML作为服务配置。
问题是:“有可能”吗?
我知道(由于 this question)我可以做这样的事情:
var anyJson map[string]interface{}
json.Unmarshal(bytes, &anyJson)
问题出在我必须访问值时:要求我执行类型断言,例如
anyJson["id"].(string)
现在,例如,我也许可以通过JSON模式知道anyJson [“id”]的类型,但是我不知道我是否可以执行参数类型声明,例如
anyJson["id"].(typeForIDFromJSONSchema)

最佳答案

解码map[string]interface{}时,每个嵌套的JSON对象也将是map[string]interface{}。因此,通常可以对string包含的元素进行类型断言,但对于任何struct类型,而不是-解码器始终不会意识到您的结构。
所以我建议的两个选择是

  • 使用类型开关和类型断言来“艰难地”做到这一点-这是可行且快速的,但并不是很好。或
  • 使用其他工具,例如jsonitergjson-这些可能会慢一些,但它们确实允许您遍历任意JSON图

  • 我曾经用过GJson和Jsoniter。 GJson的工作方式是通过输入逐字节读取数据,使用缓冲来保持其速度,并提供了一个API,该API可以检查当前元素和声明以转换值。
    在Java中,Jsoniter看起来很像成功的解析器,这是一种更干净的实现,但是我还没有以这种方式使用它进行解析。 (它也可以简单地用作标准Go encoding/json的快速替代品。)我建议您着重使用其 IteratorWhatIsNext方法。

    关于json - 通过模板将通用JSON转换为XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65890413/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com