2

我正在构建 JSON 对象并使用 JQuery ajax 将其传递给服务器。

data: "{'authorID' : '" + authorID +
      "', 'title' : '" + encodeURIComponent(blogTitle) +
      "', 'msg' : '" + encodeURIComponent(blogBody) +
      "', 'preview' : '" + encodeURIComponent(mediaContent) +
      "', 'layoutID' : '" + previewLayoutId +
      "', 'threadID' : '" + threadID + "'}"

但是当我的 blogBody 变量包含'代码失败并显示错误消息时:

{"Message":"Invalid object passed in, \u0027:\u0027 or \u0027}\u0027 expected. (107): {\u0027authorID\u0027 : \u0027148385\u0027, \u0027title\u0027 : \u0027123213\u0027, \u0027msg\u0027 : \u0027%3Cp%3Eqqq%3C%2Fp%3E%3Cp%3E%3Cbr%3E%3C%2Fp%3E%3Cp%3E\u0027\u0027\u0027\u0027%3C%2Fp%3E\u0027, \u0027preview\u0027 : \u0027\u0027, \u0027layoutID\u0027 : \u00271\u0027, \u0027threadID\u0027 : \u00270\u0027}","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

有人可以说错误在哪里以及如何解决吗?

4

5 回答 5

8

JSON中,键必须用双引号 ( ") 引用,而不是单引号 ( ')。同样,字符串值必须是双引号,而不是单引号。您正在使用单引号。例如,围绕authorId标题的文本。

因此,您至少需要交换这些引号,例如:

data: '{"authorID" : "' + authorID +
      '", "title" : "' + encodeURIComponent(blogTitle) +
      '", "msg" : "' + encodeURIComponent(blogBody) +
      '", "preview" : "' + encodeURIComponent(mediaContent) +
      '", "layoutID" : "' + previewLayoutId +
      '", "threadID" : "' + threadID + '"}'
于 2012-11-23T13:47:09.260 回答
2

改用这个:

JSON.stringify(object)
于 2012-11-23T13:52:41.983 回答
0

JavaScriptSerializer()在使用 Microsoft将对象转换为 JSON的功能时,我遇到了同样的问题。

它将撇号转换为\u0027,但jqGrid会很高兴地继续将它们显示为\u0027

在此处输入图像描述

我的解决方案就是停止使用微软的JavaScriptSerializer()功能..

string JSON = new JavaScriptSerializer().Serialize(myListOfObjects).ToString();

..并切换到 JSON.Net ..

string JSON = JsonConvert.SerializeObject(myListOfObjects);

JSON.Net 还避免了将 DateTimes 转换为 JSON 的问题。微软的版本使用它自己讨厌的日期格式,例如:

/Date(1355496152000)/

呃,是的。是时候再次谷歌搜索了。或者使用 JSON.Net !

于 2014-08-07T12:50:49.927 回答
-1

JSON 字段名称应该用双引号括起来,字符串值也应该用双引号括起来。请参阅此处的JSON 语法规则。您还可以使用在线 JSON 验证网站(如DebugJSON )来验证 JSON 输出。

于 2016-10-10T17:18:43.227 回答
-2

正如 TJ Crowder 所说,你的元素应该有双引号,为了确保你的格式正确,你总是可以在这里验证你的 json 数组(我总是这样做):

此外,您最好使用来生成 json 数组

http://jsonlint.com/

于 2012-11-23T13:51:07.237 回答