2

JSONオブジェクトを作成し、JQueryajaxを使用してサーバーに渡します。

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()オブジェクトを JSON に変換するためにMicrosoft の関数を使用するときに、同じ問題が発生しました。

アポストロフィは に変換されますが\u0027jqGridは喜んでそれらを として表示し続けます\u0027

ここに画像の説明を入力

私の解決策は、Microsoftの機能の使用をやめることでしたJavaScriptSerializer()..

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

..そして JSON.Net に切り替えます..

string JSON = JsonConvert.SerializeObject(myListOfObjects);

JSON.Net は、DateTime を JSON に変換する際の問題も回避します。Microsoft のバージョンでは、日付に独自の厄介な書式を使用しています。たとえば、次のようになります。

/Date(1355496152000)/

エラー、ええ。グーグルを再び取得する時間です。またはJSON.Netを使用してください!

于 2014-08-07T12:50:49.927 に答える
-2

TJ Crowder が言ったように、要素には二重引用符を付ける必要があり、フォーマットが正しいことを確認するために、ここで json 配列をいつでも検証できます (私はいつもそうしています)。

また、これを使用してjson配列を生成することをお勧めします

http://jsonlint.com/

于 2012-11-23T13:51:07.237 に答える