0

ユーザーが送信した文字列値 'null' が '"null"' としてデータベースに格納されているという最近の問題に遭遇しました。基本的に、文字列の最初と最後に二重引用符が追加されています。

調査の結果、JSON-lib が「null」文字列値を正しく処理していないように見えることが明らかになりました。これは、以下の試験方法により示される。

@Test
public void shouldHandleNullStringInJsonFormattedString() {
    String jsonTest = "[\"null\",\"aValue\"]";
    assertTrue(jsonTest.contains("\"null\""));
    assertFalse(jsonTest.contains("\"\\\"null\\\"\""));
    String convertedBack = JSONSerializer.toJSON(jsonTest).toString();
    // fails at below line
    assertFalse(convertedBack.contains("\"\\\"null\\\"\""));
}

@Test
public void shouldHandleNullStringLiteral() {
    JSONArray jsonArray1 = JSONArray.fromObject(Arrays.asList(null,"b"));
    JSONArray jsonArray2 = JSONArray.fromObject(Arrays.asList(JSONNull.getInstance(),"b"));
    JSONArray jsonArray3 = JSONArray.fromObject(Arrays.asList("null","b"));
    assertEquals("[null,\"b\"]", jsonArray1.toString());
    assertEquals("[null,\"b\"]", jsonArray2.toString());
    //fails at below line
    assertEquals("[\"null\",\"b\"]", jsonArray3.toString());
}

基本的に、ブラウザが ["null", "aValue"] をサーバーに送信すると、JSON-lib はそれを ["\"null\"", "aValue"] に変更します。また、サーバー側からは、JSONArray を使用して ["null", "b"] のような JSON 形式の文字列を構築することはできません。JSON-lib は、これら 2 つの基本的なシナリオを適切に処理していないようです。

メーリング リストに電子メールを送信し、サイトに記載されている連絡先の電子メールを送信しましたが、まだ応答がありません。誰かが以前にこの問題について投稿したようです

http://sourceforge.net/p/json-lib/discussion/587134/thread/faf83e9a/

しかし、それに対する返事もありません。

この問題に対する提案/修正はありますか?

json-lib の最新バージョン、つまり 2.4 を使用しています。

アップデート

json lib net.sf.json.util.JSONUtils.mayBeJSON メソッドのソース コードを見ると、少し奇妙です。

public static boolean mayBeJSON( String string ) {
      return string != null
            && ("null".equals( string )
                  || (string.startsWith( "[" ) && string.endsWith( "]" )) || (string.startsWith( "{" ) && string.endsWith( "}" )));
   }

「null」のリテラル文字列値は JSON と見なされるようです??

4

1 に答える 1

0

この問題に対する提案/修正はありますか?

私の提案は、github ( project " aalmiray / Json-lib" ) から最新バージョンをダウンロードしてビルドすることです。最初に「マスター」ブランチを試し、次に「開発」ブランチを試し、最後に存在するさまざまなフォークを調べます。

それでも答えが得られない場合は、独自のフォークを作成し、自分で修正を開発してください。それから、プル リクエストを送信して組み込みます。


プラン B は、問題がより迅速に修正される json-lib に代わるものを探すことです。このプロジェクトの所有者は、問題に対処し、マージ要求に対応するのに永遠にかかっているようです。

于 2013-10-17T11:05:24.137 に答える