2011-02-23 16 views
1

サーバはそれがはどのようにJSONデータを解析することができるかどうかをチェックする

</style> 
</head> 
<body> 
    <div id="content"> 
     <h1>An Error Was Encountered</h1> 
     <p>The URI you submitted has disallowed characters.</p> </div> 
</body> 
</html> 

で返信されており、私のアプリは、例外をスローすることによってクラッシュされた特殊文字を扱うことができないので、私は、サーバーへの特殊文字を含むメッセージを送信していますJSONパーサー

JSON_FAIL(JSON_TEXT("Not JSON!")); 
throw std::invalid_argument(EMPTY_STRING2); 

メッセージがserver.Soにリクエストを送信する前に私は、ユーザーまたはにエラーを解析する他の方法を警告「ではない有効なメッセージ」を置くことができ、有効であるかどうかを確認することが可能です私ssage(「エラーが発生しました」)、解析前に警告を表示します。

答えて

1

それは例外を投げていたので...私はちょうどtryブロックとキャッチブロックIはアラートを表示しました。

0

jQueryを使用している場合は、parseJSON関数を使用してデータがサーバーに送信される前にテストできます。

var obj = jQuery.parseJSON('{"name":"John"}');<br/> 
alert(obj.name === "John"); 

http://api.jquery.com/jQuery.parseJSON/

+0

私はjQueryを使用していません...データを解析するのにlibJSONを使用しています –

+0

これは当てはまりません。 '$ .parseJSON()'は文字列をテストせず、解析します。文字列が無効な場合、例外がスローされます。私はあなたが理論的にそれをテストするために使用することができますtry/catchブロックに置く場合は、推測するが、このメソッドは、文字列の妥当性のテスターではありません。 – Jason

0

ちょうどあなたが送信したメッセージをURL_ENCODEしてみてください。または、各メッセージシンボルを16進表現(「Hello!」 - >「48656c6c6f21」など)に置き換える独自のアルゴリズムでメッセージをエンコードしますが、メッセージサイズは2倍になります。 その後、独自のエンコーディング方法を使用する場合、サーバー側でメッセージをデコードする必要があります。url_encodedデータは自動的にデコードされます。 また、解析する前に応答テキストをチェックしなければなりません。 ""テキストで始まるかどうかをチェックするだけです。 そして最後に、文字列の文字とテストスルー無効な文字ループの文字列をテストするために、彼らは、許可されていない文字列に含まれる

array<Byte> strchars = new array<Byte>(255); 
str.GetBytes(strchars, 0, str.length); 
string dch = "<>@#%^&`\\'\""; 
bool invalid = false; 
for (i=0;i<str.length;i++) if (dch.IndexOf(strchars[i]) >= 0) {invalid = true; break; } 

P.S.のようになめらかありません私は母国語のスピーカーではなく、Objective Cで珍しいので、私をたくさん判断しないでください:D

+0

いいアイデアですが、私はサイズを増やしたくないし、すでにこのサーバーを使っている他の多くのアプリがあるので、私はサーバー側で変更できません。 –

関連する問題