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"}
我正在处理一个大项目,有一段代码,我使用 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"}