3

文字列を含む JSON を返す REST サービスがあります。この文字列は、いくつかの単語の集合です。これらの文字列を結合するときは、「/」を使用して、後でセパレーターで分割します。

例:- 取得している json 文字列- AAA/BBB/CCC (DB からこの値を読み取っています)

UI では、ビジネス ロジックを考え出すために導入したセパレーター '/' からこの文字列を吐き出しています。

私の問題は、「/」を導入するセパレーターは、ユーザーが入力することさえできるものです。たとえば、ユーザーが文字列の 1 つに「/」を入力しすぎると、JSON は次のようになります。

例:- AAA/BBB/CC/C (/ ユーザーが 2 つの C を入力した後)

次に、同じ値を使用して文字列を分割するため、文字列分割ロジックが間違っています

この種の問題を処理する理想的な方法は何ですか。.NET C# を使用しています

理想的には、文字列を結合し、エンド ユーザーが決して入力しないものに基づいて文字列を分割する方法が必要です

4

6 に答える 6

4

1 つのオプションは、コレクションをスカラー値として格納しないことです。これをデータベースで 1 対多の関係でモデル化するか、たとえばコレクションを XML としてシリアル化し、これを 1 つの列に格納することができます。

于 2012-08-14T09:35:12.307 に答える
1

配列を表すために文字列を使用しないでください。JSON を返す必要があります['First', 'Second', 'Third', 'etc']。任意の JSON ライブラリを使用して C# から生成できます (MVC3 を使用している場合は、簡単return Json(...)に配列を作成できます)。

Javascript に関する限り、簡単に使用できる配列が得られます。また、投稿を戻すのは非常に簡単なはずです。

于 2012-08-14T09:38:31.807 に答える
1

車輪を再発明する代わりに、独自のシリアル化コードを記述します。標準の JSON ライブラリを使用してシリアル化を行ってみませんか。

JSON はすでに配列またはコレクションの概念に対応しており、独自の区切り文字をエスケープするように設計されています。標準の JSON の途中に独自の適切な形式を追加する必要はありません。

この質問は、すでに JSON シリアライザーの選択の問題を扱っています。


オブジェクトに文字列を some として保存するだけIEnumerable<string>です。とにかく、それらはおそらくデータモデルからそのように出てきます。

于 2012-08-14T09:46:44.080 に答える
0

「/」の前に「/」を追加します。余分な「/」は、これを区切りフラグではなく文字として処理する必要があることを示しています。正規表現でできる分割

于 2012-08-14T09:35:32.273 に答える
0

次のようなことができます

文字列 S='AAA','BBB','CCC'

次のように書くことができるコードよりも

string[] ary=S.Replace("|","Pipe;").Replace("','","|").Split('|') ary[0] = ary[0].Replace( "パイプ;","|")

于 2012-08-14T09:41:52.057 に答える
0

この文字列を POST または PUT する場合は、このように独自のエンコーディングをロールしないでください。XML と JSON は既に定義されています。賛否両論の議論は尽きませんが、どちらも機能するので、どちらかを使用してください。

URI でこの文字列を使用して GET する場合 (当然 GET である場合はより良い選択であり、そうでない場合はバグが発生しやすいという点でより悪い選択です)、 application/x-www-form-urlencoded は適切ですまさにこの用途のために定義されています: URI エンコードitem=AAA&item=BBB&item=CCCされ&=いない&or =(および URI で制限されているその他の文字) からの and を通常の方法でエンコードします (文字の UTF-8 を計算し、各オクテットの値を追加します) %so eg =isの後にis %3Dëis%C3%ABなど。

基本的なアプローチに本当に固執する必要がある場合、U+001F は伝統的に最下位レベルでフィールドを分離する目的を持つ制御文字です (U+001E、U+001D、および U+001C は、ますます高いレベルのフィールドで使用されます)。フィールドのグループを分離する) ほとんどのキーボードには表示されません (そして、それらを入力するためにキーボードを設定するのに十分なほどオタクで古い学校の人は、フィールドを分離することを期待しています)。この 1960 年代のアプローチを 2012 年の問題に適用することはお勧めしませんが、それを回避できる場合はお勧めしません (ただし、米国のコンピューターは依然としてジョンソン大統領によってこれらの文字をサポートするように義務付けられていると思います!)

そして、Ada Lovelace の愛のために、エンコードされた文字列をデータベースに保存しないでください (おそらく、診断目的で送信されたもののログを記録するためのログ テーブルを除く)。個別のフィールドとして、個別のフィールドを db に格納します。ノーマライゼーションは 1960 年代のアプローチであり、2012 年でも有効です。

于 2012-08-14T09:59:34.833 に答える