【问题标题】:json array with objects not fetching带有未获取对象的json数组
【发布时间】:2016-01-04 17:24:28
【问题描述】:

在我的 java spring 项目中,我有一个带有对象的 json 数组字符串。我想从字符串中获取数据,然后保存到数据库中。

所以,我有: pojo类

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);
        }
    }

但我收到错误:

移动用户注册 > 错误:java.lang.IllegalStateException:应为 BEGIN_OBJECT,但在第 1 行第 2 列为 BEGIN_ARRAY

没有删除数组,我如何获取联系人?

【问题讨论】:

  • 尝试像 { "data": [your array goes here] } 一样包装它
  • 您通过显示包含未声明且没有解释的变量的代码示例来浪费其他用户的时间。您声明未使用的 stringdata 并使用未声明的 userDao。此外,您应该正确格式化您的代码
  • @Christian 我想你没有意识到这只是一段代码。如果他贴出错误语句,则代码编译。关于浪费时间,在 SO 上发帖的每个人(包括您)都在浪费其他用户的时间。 :)
  • 只是一个建议:如果你不能解决他的问题,那就去另一个问题或者去看看书。不要发布任何内容。
  • @Paulo,你是对的。

标签: java arrays json


【解决方案1】:

您的 JSON 字符串以 [] 开头和结尾,因此 GSONJackson 或任何其他解析器都将解析一个数组。所以为了解决这个问题,你必须这样做

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());  

【讨论】:

  • 联系contactObject = contact1[0];我收到错误:-- 表达式的类型必须是数组类型,但它解析为 List
  • @Preeti 哎呀,我修好了
【解决方案2】:

内容包含一个数组,而您期望单个类。您需要传递 Contact 类的 List 类型,例如通过声明虚拟字段并获取其类型:

private static List<Contact> contactTypeField;

...
List<Contact> contacts = new Gson().fromJson(contactreceive,
        MyClass.getDeclaredField("contactTypeField").getGenericType());

【讨论】:

  • 示例中包含实际解析代码的类。
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
相关资源
最近更新 更多