Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串[]数组长度不等于其中的实际元素数_Java_Arrays_Spring_Hibernate_Tostring - Fatal编程技术网

Java 字符串[]数组长度不等于其中的实际元素数

Java 字符串[]数组长度不等于其中的实际元素数,java,arrays,spring,hibernate,tostring,Java,Arrays,Spring,Hibernate,Tostring,我有一个很大的项目,我正在工作,有一段代码,在我的服务器上使用spring和hibernate(json格式)从http post请求中获得2个字符串数组,当我打印数组大小时,我得到1作为回报,但同时我得到了(正如我应该/想要/期望的那样)它里面有2个元素,所以当我以预期的长度迭代数组时,我会得到一个“数组超出界限异常”,这在我看来真的很奇怪 p、 这个问题在其他地方也会重复出现,也许它与hibernate/spring?有关 输出: deviceAaddr - size = 1, [0022C

我有一个很大的项目,我正在工作,有一段代码,在我的服务器上使用spring和hibernate(json格式)从http post请求中获得2个字符串数组,当我打印数组大小时,我得到1作为回报,但同时我得到了(正如我应该/想要/期望的那样)它里面有2个元素,所以当我以预期的长度迭代数组时,我会得到一个“数组超出界限异常”,这在我看来真的很奇怪

p、 这个问题在其他地方也会重复出现,也许它与hibernate/spring?有关

输出:

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

代码:

休息控制器:

@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);
}
编辑:正如jtahlborn和Joe回答的那样,json数据是 不正确:[“0022C01504D30022C015050F”]是单元素数组。A. 双元素数组将是[“0022C01504D3”,“0022C0150F”]


json字符串是具有4个键值对的正确json。您可以将其放入文件
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());
            }
        }
    }
}

我希望这对你有帮助

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

您可能需要的JSON是:

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

请发布此行为的详细信息。我无法复制此行为。请尝试此
batch+=“'”+deviceAddr[0]+“”
数组.toString(DeviceAddress)
比遍历数组更清晰。asList()
。您的json数据不正确:
[“002C01504D30022C015050F”]
是一个单元素数组。两元素数组应该是
[“0022C01504D3”,“0022C0150F”]
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"
{"deviceAddr":["0022C01504D3","0022C015050F"],"devicePass":["HOMI26","HOMI26"],"deviceCount":2,"version":"MU18"}