package main
import "fmt"
import "encoding/json"
type Track struct {
XmlRequest string `json:"xmlRequest"`
}
func main() {
message := new(Track)
message.XmlRequest = "<car><mirror>XML</mirror></car>"
fmt.Println("Before Marshal", message)
messageJSON, _ := json.Marshal(message)
fmt.Println("After marshal", string(messageJSON))
}
是否有可能做出json.Marshal
无法逃脱<
和>
?我目前得到:
{"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
但我正在寻找这样的事情:
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
从Go 1.7开始,您仍然 无法使用json.Marshal()做到这一点
。json.Marshal的源代码显示:
> err := e.marshal(v, encOpts{escapeHTML: true})
json.Marshal总是这样做的原因是:
字符串值编码为强制转换为有效UTF-8的JSON字符串,用Unicode替换符文替换无效字节。尖括号“ <”和“>”转义为“ \ u003c”和“ \
u003e”,以防止某些浏览器将JSON输出误解为HTML。由于相同的原因,“&”号也转义为“ \ u0026”。
这意味着您甚至无法通过编写自定义来做到这一点func (t *Track) MarshalJSON()
,您必须使用不满足json.Marshaler接口的功能。
因此,解决方法是编写您自己的函数:
func (t *Track) JSON() ([]byte, error) {
buffer := &bytes.Buffer{}
encoder := json.NewEncoder(buffer)
encoder.SetEscapeHTML(false)
err := encoder.Encode(t)
return buffer.Bytes(), err
}
https://play.golang.org/p/FAH-XS-QMC
如果您想要任何结构的通用解决方案,则可以执行以下操作:
func JSONMarshal(t interface{}) ([]byte, error) {
buffer := &bytes.Buffer{}
encoder := json.NewEncoder(buffer)
encoder.SetEscapeHTML(false)
err := encoder.Encode(t)
return buffer.Bytes(), err
}
https://play.golang.org/p/bdqv3TUGr3
问题内容: Ajax使用回调,因为它是同步的。 我希望对远程URL块的调用直到出现一些答案为止 ,就像在Ajax中一样,但是没有异步部分,或者我要说要进行JAX调用。 是否有任何技术可以使以下事情发生(使用JQuery)(…使用JQuery或其他解决方案): 我只是想知道-想学习。 实际上,有时会阻塞直到回复合适为止。我并不是说要浏览器阻止,而只是脚本运行时。 问题答案: 您可以在使用jQuery
问题内容: 是否可以使用angularjs拦截器阻止请求? 问题答案: 在1.1.5及更高版本中,您可以使用配置对象的’timeout’属性。 从文档中: 超时– {number | Promise} –超时(以毫秒为单位),或承诺应在解决后中止请求。 简单的例子:
问题内容: 我一直在使用转换和过渡来创建没有Javascript的动画UI组件,并真正享受结果,但是我遇到了一个令人困扰的问题,它似乎是Webkit浏览器所特有的。 在我旋转过的元素上,只能在元素右侧50%上访问跨越元素宽度100%的锚。 在Firefox中使用-moz-transform不存在此问题,但是在使用-webkit- transform的Chrome和Safari中均可以100%再现此
我正在做一个正在改造/现代化的项目,其中有一个小的RMI部分,不幸的是,我以前从未与RMI合作过。 我不明白的一件事是,为什么在我最初创建RMI客户端之后,它一直调用其自定义SocketFactory构造函数。似乎每5分钟我就会看到一次调用构造函数的输出,即使客户端和服务器之间没有通信。 连接完成后,我应该做什么来清理和停止任何线程以进行持久化? 我在检查UnicastRemoteObject,也
问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当
问题内容: 强制保持Node.js进程运行的最佳方法是什么,即使其事件循环不为空,从而防止进程终止?我能想到的最好的解决方案是: 如果您将间隔时间保持足够长,它将使间隔运行,而不会引起过多干扰。 有更好的方法吗? 问题的长版 我有一个使用Edge.js来注册回调函数的Node.js脚本,以便可以从.NET中的DLL内部对其进行调用。每秒将调用此功能1次,发送一个应打印到控制台的简单序列号。 Edg