我有一个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的这个电话。
答案 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响应。