0

JSONArray をシャッフルしてサブセット (JSONArray) を取得しようとしています。たとえば、JSONArray に 5 つのエントリがある場合、5 つのうちランダムな 3 つのエントリを持つ JSONArray を生成したいとします。以下は、JSONArray をシャッフルするためのコードです。問題は、出力 JSONArray に、二重引用符 (") が出現するたびにバックスラッシュ () 文字が導入されていることです。なぜこれが起こっているのかわかりません。誰かからの助けを借りてください。また、5 の最初の 3 つのランダムなエントリをJSONArray

public JSONArray getRandomJSONArray(JSONArray jArray){
    List<String> stringArrayMaster = new ArrayList<String>(Arrays.asList(jArray.toString()));
    Collections.shuffle(stringArrayMaster);
    JSONArray randomJArray = new JSONArray(stringArrayMaster);
    return randomJArray;
 }
4

3 に答える 3

0

最終的にそれを行うことができました。以下はコードです。変数 numQuestions には、必要な配列サブセットのサイズの整数値が含まれていることに注意してください。したがって、jArray.length() は 5 で、numQuestions は 3 (jArray.length() 未満の任意の数) です。

JSONArray shuffled = new JSONArray();   
    ArrayList<Integer> intArr1=new ArrayList<Integer>(jArray.length());
    for(int i = 0; i<jArray.length(); i++){
        intArr1.add(i);
    }
    Collections.shuffle(intArr1);
    for(int i = 0; i < intArr1.size(); i++){
        shuffled.put(i, jArray.get(intArr1.get(i)));
        if (i==(numQuestions-1))
                break;
    }
    return shuffled;
于 2013-05-09T21:23:28.210 に答える
0

\ が追加されるのは、JSON の " には特別な意味があるためです。つまり、フィールドの終わりです。そのため、文字列に " を含めるには、それをエスケープする必要があります。\ はそのエスケープに使用されます。最初の 3 つのエントリの取得については、jsonArray.getString(0); jsonArray.getString(1); jsonArray.getString(2); おまけとして、JSONArray は Java がエスケープを必要としないことを認識しているため、これらはエスケープしないでください。

于 2013-05-09T18:24:33.397 に答える
0

JSONArray から 3 つのランダムなエントリを手動で取得しないのはなぜですか? JSONArray が JSONObjects で構成されていると仮定すると、次のことができます。

JSONArray shuffled = new JSONArray();
Random r = new Random();
int size = jArray.length();
for(int i = 0; i < 3; i++){
    shuffled.put(jArray.getJSONObject(r.nextInt(size - 1)));
}
return shuffled;

私の考えは、ランダムなエントリを保持する新しい JSONArray を作成することです。jArray の境界内 (0 と配列のサイズ - 1) で乱数を生成し、そのインデックス値に対応するオブジェクトを取得して、新しいシャッフル コレクションに追加します。

これにより、エスケープ文字がミックスに追加されることはありません。

于 2013-05-09T19:08:13.383 に答える