如何将JSONArray转换为int数组?

omjgkv6w  于 2023-05-30  发布在  其他
关注(0)|答案(5)|浏览(365)

我在使用JSONObject sayJSONHello()方法时遇到了问题。

@Path("/hello")
public class SimplyHello {

    @GET
    @Produces(MediaType.APPLICATION_JSON)

     public JSONObject sayJSONHello() {      

        JSONArray numbers = new JSONArray();

        numbers.put(1);
        numbers.put(2);
        numbers.put(3);
        numbers.put(4);             

        JSONObject result = new JSONObject();

        try {
            result.put("numbers", numbers);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return result;
    }
}

在客户端,我想得到一个int数组[1, 2, 3, 4],而不是JSON

{"numbers":[1,2,3,4]}

我该怎么做?
客户代码:

System.out.println(service.path("rest").path("hello")
    .accept(MediaType.APPLICATION_JSON).get(String.class));

我的方法返回一个JSONObject,但我想从中提取数字,以便使用这些数字执行计算(例如作为int[])。
我把函数当作JSONObject。

String y = service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).get(String.class);   
JSONObject jobj = new JSONObject(y);   
int [] id = new int[50];
 id = (int [] ) jobj.optJSONObject("numbers:");

然后我得到错误:无法从JSONObject转换为int[]
2其他方式

String y = service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).get(String.class);   
JSONArray obj = new JSONArray(y);  
int [] id = new int[50];      
 id = (int [] ) obj.optJSONArray(0);

而这次我得到的是:无法从JSONArray强制转换为int[]...
它不工作反正。

pwuypxnk

pwuypxnk1#

我从来没有使用过它,也没有测试过它,但是看看你的代码和JSONObjectJSONArray的文档,这就是我的建议。

// Receive JSON from server and parse it.
String jsonString = service.path("rest").path("hello")
    .accept(MediaType.APPLICATION_JSON).get(String.class);
JSONObject obj = new JSONObject(jsonString);

// Retrieve number array from JSON object.
JSONArray array = obj.optJSONArray("numbers");

// Deal with the case of a non-array value.
if (array == null) { /*...*/ }

// 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);
}

这应该对你的案子有用。在更严格的应用程序中,您可能需要检查值是否确实是整数,因为当值不存在或不是整数时,optInt返回0
获取与索引关联的可选int值。如果索引没有值,或者值不是数字且无法转换为数字,则返回零。

rkue9o1l

rkue9o1l2#

如果你可以接受一个List作为结果,也可以接受使用Gson,有一个非常简单的方法来做到这一点,只需几行代码:

Type listType = new TypeToken<LinkedList<Integer>>() {}.getType();
List<Integer> numbers = new Gson().fromJson(jobj.get("numbers"), listType);

我知道这并不是你所要求的,但根据我的经验,整数列表可以以许多与基本int[]相同的方式使用。关于如何将链表转换为数组的更多信息,可以在这里找到:How to convert linkedlist to array using toArray()?

l3zydbqr

l3zydbqr3#

2023年5月
Java:

下面是一个简单的方法,用于处理JSONArray转换为Int Array

public static int[] JSonArray2IntArray(JSONArray jsonArray){
    int[] intArray = new int[jsonArray.length()];
    for (int i = 0; i < intArray.length; ++i) {
        intArray[i] = jsonArray.optInt(i);
    }
    return intArray;
}

Kotlin:

val intArr = Array(jsonArr.length()) {jsonArr.getInt(it)}
  • intArrArray<Int>
  • it从第一个数组元素开始,依次为每个数组元素调用高阶函数。它应该返回给定索引的数组元素的值。
1rhkuytd

1rhkuytd4#

你也可以这样做

JSONArray numberArr=jsonObject.getJSONArray("numbers");

            int[] arr=new int[numberArr.length()];
            for(int k=0;k<numberArr.length();k++)
                 arr[k]=numberArr.getInt(k);
64jmpszr

64jmpszr5#

而不是-

result.put("numbers", numbers);

你可以试试(我还没有测试过)

result.put(numbers);

或者遍历数组“numbers”,并将每一个单独放入“result”中。

相关问题