Java 对象未提取的json数组
在我的JavaSpring项目中,我有一个带有对象的json数组字符串。我想从字符串中提取数据,然后保存到数据库中 因此,我: 波乔班Java 对象未提取的json数组,java,arrays,json,Java,Arrays,Json,在我的JavaSpring项目中,我有一个带有对象的json数组字符串。我想从字符串中提取数据,然后保存到数据库中 因此,我: 波乔班 public class Contact { private String id; private String name; private String mobile; //getters and settrs & constructors } 我想获取如下代码所示的数据: String stringdata=
public class Contact {
private String id;
private String name;
private String mobile;
//getters and settrs & constructors
}
我想获取如下代码所示的数据:
String stringdata=["{"id":"1","mobile":"1860108","name":"Intex"}",
"{"id":"21","mobile":"777717717","name":"pari"}",
"{"id":"26","mobile":"172676236","name":"pari2"}"];
try {
Contact contact1 = new Contact();
try {
contact1 = new Gson().fromJson(contactreceive, Contact.class);
}
catch (UnsupportedEncodingException uee) {
return new ResponseEntity<Object>("failed", HttpStatus.EXPECTATION_FAILED);
}
Contact contact = new Contact(contact1.getId(),contact1.getName(),contact1.getMobile());
userDao.saveContact(contact);
return new ResponseEntity<Object>("created", HttpStatus.CREATED);
} catch (Exception e) {
logger.error("Mobile User Signup > Error: " + e.getMessage());
return new ResponseEntity<Object>(HttpStatus.NO_CONTENT);
}
}
String stringdata=[“{”id:“1”,“mobile:“1860108”,“name:“Intex”}”,
“{”id:“21”,“mobile:“777717717”,“name:“pari”}”,
“{”id:“26”,“mobile:“172676236”,“name:“pari2”}”];
试一试{
触点1=新触点();
试一试{
contact1=new Gson().fromJson(contactreceive,Contact.class);
}
捕获(不支持的编码异常uee){
返回新的响应属性(“失败”,HttpStatus.EXPECTATION\u失败);
}
Contact Contact=新联系人(contact1.getId(),contact1.getName(),contact1.getMobile());
userDao.saveContact(contact);
返回新的响应属性(“已创建”,HttpStatus.created);
}捕获(例外e){
logger.error(“移动用户注册>错误:+e.getMessage());
返回新的响应属性(HttpStatus.NO_内容);
}
}
但我得到了一个错误:
移动用户注册>错误:java.lang.IllegalStateException:应为BEGIN_对象,但在第1行第2列为BEGIN_数组
如果不删除数组,我如何获取该联系人?当您需要单个类时,内容包含一个数组。您需要传递Contact类列表的类型,例如通过声明虚拟字段并获取其类型:
private static List<Contact> contactTypeField;
...
List<Contact> contacts = new Gson().fromJson(contactreceive,
MyClass.getDeclaredField("contactTypeField").getGenericType());
私有静态列表contactTypeField;
...
List contacts=new Gson().fromJson(contactreceive,
MyClass.getDeclaredField(“contactTypeField”).getGenericType();
您的JSON字符串以[]
开头和结尾,因此GSON
或Jackson
或任何其他解析器将解析数组。所以为了解决这个问题,你必须这样做
List<Contact> contact1 = new ArrayList<>();
contact1 = new Gson().fromJson(contactreceive, Contact.class);
Contact contactObject = contact1.get(0);
Contact contact = new Contact(contactObject.getId(),contactObject.getName(),
contactObject.getMobile());
List contact1=new ArrayList();
contact1=new Gson().fromJson(contactreceive,Contact.class);
Contact contactObject=contact1.get(0);
Contact Contact=新联系人(contactObject.getId(),contactObject.getName(),
contactObject.getMobile());
试着把它包装成{“data”:[你的数组在这里]}显示一个代码示例,其中包含未声明且没有解释的变量,这是在浪费其他用户的时间。声明未使用的stringdata和未声明的userDao。此外,您应该格式化您的代码properly@Christian我想你没有意识到这只是一段代码。如果他发布了一个错误语句,那么代码将被编译。关于时间浪费,在SO上发布的每个人(包括您)都在浪费其他用户的时间。:)只有一个建议:如果你不能解决他的问题,就去问另一个问题或者去读一本书。不要发布任何内容。@Paulo,你说得对。示例中包含实际解析代码的类。Contact contactObject=contact1[0];我得到错误:--表达式的类型必须是数组类型,但解析为List@Preeti哎呀,我修好了