我正在尝试改组JSONArray并获取子集(JSONArray)。因此,例如,如果我的JSONArray有5个条目,我想生成一个JSONArray,其中包含5个随机3个条目。 下面是改组JSONArray的代码。问题是输出JSONArray在每次出现双引号(“)之前都引入了反斜杠()字符。不知道为什么这个hapening。来自某人的任何帮助。还有任何建议我如何从a中选择前5个随机条目5 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;
}
答案 0 :(得分:0)
添加\是因为“在JSON中有一个特殊含义 - 它是字段的结尾。所以要在字符串中有一个”你需要转义它。 \用于逃脱。至于获得前3个条目 - jsonArray.getString(0); jsonArray.getString(1); jsonArray.getString(2);作为奖励,这些应该是未转义的,因为JSONArray知道java不需要转义
答案 1 :(得分: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),然后获得对应于该索引值的对象,并将其添加到新的shuffled集合中。
这不会在混音中添加任何转义字符。
答案 2 :(得分: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;