无法改变JSONArray

时间:2013-05-09 18:19:57

标签: java android

我正在尝试改组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;
 }

3 个答案:

答案 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;