Golang使用嵌入式XML

时间:2016-02-17 18:48:56

标签: json go

我有一个JSON的http响应体,但是它包含一个字段,并且它是一个XML文档作为字符串。我根本不想解析XML,我只想提取它,因为我需要将它作为XML发送到其他地方。当我尝试使用时:

body, err := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
var ccr []models.Ccda
err = json.Unmarshal(body, &ccr)

模型是这样的:

Ccda struct {
    CCDA string `json:"ccda"`
}

我得到了“无效字符”的错误<'寻找价值的开端“

我也尝试使用字符串映射,但仍然存在相同的错误。

json响应的开头是:

[{
    "ccda": "<?xml version=\"1.0\"?>\n<ClinicalDocument xmlns=\"urn:hl7-org:v3\"..."
}]

ccda是json字符串中唯一的元素。同样,我不想解析XML。

GO处理转义报价的方式有问题吗? json元素ccda的值是XML字符串。

查看供应商网站(他们的工具)的原始数据,我得到了这个:

[{     “ccda”:“\ n \ n \ n \ n \ n \ n \ n \ n}}

当我读取response.Body并转换为字符串时,我得到了这个(这是不正确的,虽然我可以使用它):

<?xml version="1.0"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sdtc="urn:hl7-org:sdtc">
  <realmCode code="US"/>
  <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>
  <templateId root="2.16.840.1.113883.10.20.22.1.1"/>
  <templateId root="2.16.840.1.113883.10.20.22.1.2"/>
  <id root="0cf1a768-2016-505e-2fd3c-001A64958C30"/>
  <code code="34133-9" codeSystem="2.16.840.1.113883.6.1" displayName="Summarization of Episode Note"/>
<\ClinicalDocument>

当我在GO中执行其他调用其他信息时,我会在所有测试go / ruby​​ / site工具上找回正确的JSON。只是没有关于GO的这个电话。

1 个答案:

答案 0 :(得分:2)

JSON包报告了JSON文本中的语法错误。要查找错误的字节偏移量,请键入将错误断言为*json.SyntaxError并检查偏移量字段:

if e, ok := err.(*json.SyntaxError); ok {
    fmt.Printf("%v: %s <<--ERROR %s\n", e, body[:e.Offset], body[e.Offset:])
}

这里有一个关于发生了什么的疯狂猜测:返回Go程序的响应主体是XML,而不是JSON。该程序未获得预期的JSON响应类型,因为该程序未设置请求接受标头,查询参数或文件扩展名以请求JSON响应。