如何从float [],JSONArray解析中获取数据?

时间:2015-05-19 17:58:54

标签: java arrays

我在JSONArray表单中得到一个响应,如下所示:

"["37:0.00",
"60:23.50:55.00:22.22:52.00:192.55:20.00"
"61:0.00"]";

在这3行中,第一个数字(37,60,61)是ID(类型int)。 这些特定行的其他数字是值(类型float)。 如何将特定ID的这些值设为float[]

这是我的代码:

public void setValuesFromResponse(String response) {
    deviceList = database.getDevices();
    List<float[]> parsedData = parse(response);
    Log.i("setValFromResp: ", "parsedData --> DONE");

    for (int i = 0; i < parsedData.size(); i++) {
        int parsedDeviceId = (int) parsedData.get(i)[0]; //get ID
        float[] values =    parsedData.get(i)[1];
      //how to check if there is another value in another index (for this exmaple index 2
    }
}

这是解析方法:

public List<float[]> parse(String json) 
{ 
    List<float[]> list = new ArrayList<>(); 
    try { 
        JSONArray array = new JSONArray(json); 
        for (int i = 0; i < array.length(); i++) { 
            String dataByDevice = array.getString(i); 
            String[] values = dataByDevice.split(":"); 
            list.add(new float[values.length]); 
            for (int j = 0; j < values.length; j++) { 
                list.get(i)[j] = Float.parseFloat(values[j]); 
            }
        } 
        return list;
     } 

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

“//如何检查另一个索引中是否有另一个值(对于此exmaple索引2”,您可以添加另一个内部循环来迭代数组。

for (int i = 0; i < parsedData.size(); i++) {
    int parsedDeviceId = (int) parsedData.get(i)[0]; //get ID
    float[] values =    parsedData.get(i)[1];
  //how to check if there is another value in another index (for this exmaple index 2
} 

像这样:

for (int i = 0; i < parsedData.size(); i++) {
    int parsedDeviceId = (int) parsedData.get(i)[0]; //get ID
    for(int j = 1; j < parsedData.get(i).length; j++)
    {
         //process parsedData.get(i)[j] here
    }
}

答案 1 :(得分:0)

由于您在一个数组中包含id的所有数据,因此您只需跳过id即可获取值。

public List<float[]> parse(String json) {
    List<float[]> list = new ArrayList<>();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        String dataByDevice = array.getString(i);
        String[] values = dataByDevice.split(":");
        list.add(new float[values.length]);
        for (int j = 0; j < values.length; j++) {
             list.get(i)[j] = Float.parseFloat(values[j]);
        }
    }
    return list;
}

public void setValuesFromResponse(String response) {
    List<float[]> parsedData = parse(response);

    for(int i = 0; i < parsedData.size(); ++i) {
        int parsedDeviceId = (int) parsedData.get(i)[0]; // get ID
        System.out.print(parsedDeviceId + " : ");
        for(int j = 0; j < parsedData.get(i).length; ++j) {
            System.out.print(parsedData.get(i)[j] + ", ");
        }
        System.out.println();
    }
}

或者你可以创建一个数组副本然后迭代它

for(int i = 0; i < parsedData.size(); ++i) {
    int parsedDeviceId = (int) parsedData.get(i)[0]; // get ID
    float[] data = Arrays.copyOfRange(parsedData.get(i), 1, parsedData.get(i).length);
    System.out.print(parsedDeviceId + " : ");
    for(int j = 0; j < data.length; ++j) {
        System.out.print(data[j] + ", ");
    }
    System.out.println();
}

此外,这是如何使用Map的示例,我认为这更适合您的情况。

public Map<Integer, float[]> parse(String json) {
    Map<Integer, float[]> list = new HashMap<>();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        String dataByDevice = array.getString(i);
        String[] values = dataByDevice.split(":");
        /* first value is a key */
        Integer id = Integer.parseInt(values[0]);
        list.put(id, new float[values.length - 1]);
        /* others are values */
        for (int j = 1; j < values.length - 1; j++) {
            list.get(id)[j] = Float.parseFloat(values[j]);
        }
    }
    return list;
}

public void setValuesFromResponse(String response) {
    Map<Integer, float[]> parsedData = parse(response);

    for(Entry<Integer, float[]> entry : parsedData.entrySet()) {
        int parsedDeviceId = entry.getKey(); // get ID
        System.out.print(parsedDeviceId + " : ");
        for(float value : entry.getValue()) {
            System.out.print(value + ", ");
        }
        System.out.println();
    }
}

在所有情况下输出

String response = "[\"37:0.00\",\"60:23.50:55.00:22.22:52.00:192.55:20.00\",\"61:0.00\"]";

将是

37 : 0.0, 
60 : 23.5, 55.0, 22.22, 52.0, 192.55, 20.0, 
61 : 0.0,