String[]数组长度不等于里面实际元素个数

String[] array length isnt equal to the actual number of elements inside it

我正在处理一个大项目,有一段代码,我使用 spring 和休眠(json 格式),当我打印数组大小时,我在 return 中得到 1,但同时我在其中有(因为我 should/want/expect)2 个元素,所以当我迭代数组时我得到的预期长度是 "array out of bound exception",这在我看来真的很奇怪。

p.s。 - 这个问题也在其他地方重复出现,也许它与 hibernate/spring?.

有关

输出:

deviceAaddr - size = 1, [0022C01504D3,0022C015050F]
devicePass - size = 1, [HOMI26,HOMI26]

json:

{"deviceAddr":["0022C01504D3,0022C015050F"],"devicePass":["HOMI26,HOMI26"],"deviceCount":2,"version":"MU18"}

代码:

public class AddBatchObject {

    private String[] deviceAddr;

    public String[] getDeviceAddr() {
        return deviceAddr;
    }

    @Override
    public String toString() {
        String batch = "";
        if (deviceAddr != null){
           batch += "deviceAaddr - " + "size = " + deviceAddr.length + ", "  
           + Arrays.asList(deviceAddr).toString() + "\n";
        }
        if (devicePass != null){
           batch += "devicePass - " + "size = " + devicePass.length + ", " +
               Arrays.asList(devicePass).toString() + "\n";
        }
        return batch;
    }

}

休息控制器:

@RequestMapping(value = "/add/mac",method = RequestMethod.POST, produces =     "application/json")
public @ResponseBody Object addMac(@RequestBody AddBatchObject addBatchObject, HttpServletRequest request) throws AuthenticationException{
    LoggerUtils.getLogger().info("addMac");
    return AdminAddMac.adminAddMac(addBatchObject,request);
}

Edit: as jtahlborn and Joe answered the json data was incorrect: ["0022C01504D3,0022C015050F"] is a single element array. a two element array would be ["0022C01504D3","0022C015050F"].

json 字符串正确 json 有 4 个键值对。你可以把它放在一个文件中 data.txt

{
    "deviceAddr": ["0022C01504D3,0022C015050F"],
    "devicePass": ["HOMI26,HOMI26"],
    "deviceCount": 2,
    "version": "MU18"
}

并用jackson

阅读
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws JsonParseException, IOException {
        JsonFactory jsonFactory = new JsonFactory();
        JsonParser jp = jsonFactory.createJsonParser(new File("data.txt"));
        jp.setCodec(new ObjectMapper());
        JsonNode jsonNode = jp.readValueAsTree();
        readJsonData(jsonNode);
    }
    static void readJsonData(JsonNode jsonNode) {
        Iterator<Map.Entry<String, JsonNode>> ite = jsonNode.fields();
        while(ite.hasNext()){
            Map.Entry<String, JsonNode> entry = ite.next();
            if(entry.getValue().isObject()) {
                readJsonData(entry.getValue());
            } else {
                System.out.println("key:"+entry.getKey()+", value:"+entry.getValue());
            }
        }
    }
}

输出

key:deviceAddr, value:["0022C01504D3,0022C015050F"]
key:devicePass, value:["HOMI26,HOMI26"]
key:deviceCount, value:2
key:version, value:"MU18"

希望对您有所帮助。

输出正确。您的 JSON 包含一个包含逗号的字符串,而不是两个不同的字符串。

您可能想要的 JSON 是:

{"deviceAddr":["0022C01504D3","0022C015050F"],"devicePass":["HOMI26","HOMI26"],"deviceCount":2,"version":"MU18"}