将撇号作为JSON字符串的一部分传递

时间:2014-03-24 15:24:51

标签: json escaping

我遇到的问题是我的JSON服务没有被调用,原因可能是格式错误。

尽管如此,我还是不明白它有什么不妥。我读到了它,发现撇号不应该逃脱。当我逃离它们时,它也无法工作。

"{
  "fields": [
   {
     "Text": "PaymentReminders",
     "Value": "'yes'"
   }
 ]
}"

是的,我真的需要'是的'在撇号下。

我期待服务器端的字符串,然后我反序列化。它没有撇号。

谢谢!

EDIT1:

这是在服务器上接受的结构:

Public Class TemplateField
    Public Property Value() As String = "val"
    Public Property Text() As String = "tex"
End Class

Public Class FieldsList
    Public Property fields() As TemplateField()
End Class

它会像这样反序列化:

Dim jsSerializer As New JavaScriptSerializer

Dim fieldsArray As EventInfoDetails.FieldsList
fieldsArray = jsSerializer.Deserialize(Of EventInfoDetails.FieldsList)(fields)

并且一切正常,除非它包含撇号。就像我不能在字符串中插入撇号。

1 个答案:

答案 0 :(得分:0)

JSON不仅不需要来转义撇号,而且事实上不允许这样做(与JavaScript相反)。所以你的

"Value": "'yes'"

完全有效的JSON。这是,除非您在JavaScript代码中将此JSON作为字符串文字插入,在这种情况下,JavaScript是要求您将'作为\'转义的JavaScript(您需要两个)转义,JSON和JavaScript之上的一个。)

无论如何,你的代码有些奇怪:

"{
  "fields": [
   {
     "Text": "PaymentReminders",
     "Value": "'yes'"
   }
 ]
}"

为什么整个JSON结构都被引号(")包围?它是其他编程语言中的任何类型的字符串文字吗?在这种情况下,您可能需要遵循该语言对这些引用(")符号的转义规则。例如,Java和VB都会使用\" ......