0

我正在尝试对 JSONArray 进行洗牌并获取一个子集(JSONArray)。因此,例如,如果我的 JSONArray 有 5 个条目,我想生成一个 JSONArray,其中包含 5 个中的随机 3 个条目。下面是改组 JSONArray 的代码。问题是输出JSONArray在每次出现双引号(“)之前都引入了反斜杠()字符。不知道为什么会这样。有人的帮助。还有关于如何从a中选择前3个随机条目5的任何建议JSON数组

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

添加 \ 是因为 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 回答
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 回答