根据JSON响应

根据JSON响应

问题描述:

添加文本我将收到包含这一个JSON响应:根据JSON响应

{..."Weekday":[3,4,2],...} //numbers might not be in Ascending order 

然后根据什么“平日”里我会打印出周日0周一1等。所以上面打印的文字是;

"Tuesday,Wednesday,Thursday" //This should be in ascending order 

如何检查和打印我想要什么,我这样做的方式是这样的:

JSONObject obj = new JSONObject(result); //result from backend 
JSONObject DayOff = obj.getJSONObject("Weekday"); 

... 

tvWeekdays = (TextView) getActivity().findViewById(R.id.tvWeekdays); 
tvWeekdays.setText("The final result"); 

我不知道用怎样做到这一点,我想到的也许while循环或if语句会有帮助吗?

--- UPDATE ---

  JSONArray array = obj.getJSONArray("Weekday"); 
     if (array == null){ 

      tvDayOff = (TextView) getActivity().findViewById(R.id.tvDayOff); 
      tvDayOff.setText("None"); 
     } 
     // Create an int array to accomodate the numbers. 
     int[] numbers = new int[array.length()]; 
     Arrays.sort(numbers); 
     // Extract numbers from JSON array. 
     for (int i = 0; i < array.length(); ++i) { 
      numbers[i] = array.optInt(i); 
      System.out.println(
        DateFormatSymbols.getInstance().getWeekdays()[numbers[i]] 
      ); 

     } 
+1

** ** 1排序的INT使用'Arrays.sort'数组。 ** 2 **迭代值** 3 **使用'DateFormatSymbols.getWeekdays'将int转换为String。也许这样? – AxelH

+0

在对数据进行排序之前,您已经忘记了将值放入您的“int []数字”中。你需要循环一次“数组”来初始化“数字”然后对其进行排序。然后你可以得到字符串值(把它们放在你想要的位置) – AxelH

这里是如何得到这取决于区域的值一个简单的例子:

public static void main(String[] args){ 
    for(int i = 0; i < 7; ++i) 
     System.out.println(
      DateFormatSymbols.getInstance().getWeekdays()[i+1] //First cell is empty... 
     ); 
} 

这是我的输出(在法语语言环境) :

dimanche //Sunday 
lundi //Monday 
mardi 
mercredi 
jeudi 
vendredi 
samedi //Saterday 

由此看来,你只需要订购您使用Arrays.sort(int[])整数数组,并获得字符串。

如果不使用JSON,这会就像这样:

public static void main(String[] args){ 
    int[] array = {3, 5, 2}; //The array 
    Arrays.sort(array);  //Sort the array 
    for(int i = 0; i < array.length; ++i) //Loop on the result 
    System.out.println(
     DateFormatSymbols.getInstance().getWeekdays()[array[i]] 
    ); 
} 

最后一步将是获取数组,对于这一点,我建议你阅读this answer

编辑:

你不能在一个循环中完成。您首先需要获取值然后对数组进行排序。一旦做到这一点,你可以得到的字符串以正确的顺序

// Create an int array to accomodate the numbers. 
int[] numbers = new int[array.length()]; 
    // Extract numbers from JSON array. 
for (int i = 0; i < array.length(); ++i) { 
     numbers[i] = array.optInt(i); 
} 
Arrays.sort(numbers); 
for (int i = 0; i < numbers.length; ++i) { 
    System.out.println(
     DateFormatSymbols.getInstance().getWeekdays()[numbers[i]] 
    ); 
} 
+0

感谢你的回答,它几乎工作。然而,仍然存在一些问题,我已经更新了我的答案,但是平日显示的数据会被星期一的1. 1,星期一的2以及其他数据所抵消。另外我觉得我的数组排序不正确。 – JerryKo

+0

@JerryKo看到编辑。对于偏移量,第一天是星期日,但在索引1处。如果您希望星期一开始,则可能需要使用模数。 – AxelH

+1

谢谢您的回答 – JerryKo

JSONObject obj = new JSONObject(result); //result from backend 
    JSONArray DayOff = obj.getJSONArray("Weekday"); // I think weekday is an array 
// if weekday look like {"weekday":[2,4,3]}, its an array if so 
String[] dayText = new String[DayOff.length()]; 
for(int i=0, len=DayOff.length(); i<len; i++){ 
switch (DayOff(i)) { 
      case 0: dayText[i] = "Sunday"; 
        break; 
      case 1: dayText[i] = "Monday"; 
        break; 
      case 2: dayText[i] = "Tuesday"; 
        break; 
} 
} 

试试这个..

+0

这是一些问题,首先'DayOff(i)'是伪代码,您需要使用getter来获取值。其次,你应该订购这个数组。最后,由于这些值存在,所以不需要开关 – AxelH