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