在java中解析JSON映射时出现NullPointer异常

在java中解析JSON映射时出现NullPointer异常,java,json,hashmap,Java,Json,Hashmap,我试图在RESTAPI中从我下面的JSON解析productId、name和price,但当我试图获取他name-String name=(String)obj.get(“name”),我可以知道我做错了什么吗 任何帮助都将不胜感激。 谢谢 JSON: Controller.java public ResponseEntity<Object> create(@RequestBody Map<String, Object> obj) { Product respon

我试图在RESTAPI中从我下面的JSON解析productId、name和price,但当我试图获取他
name
-
String name=(String)obj.get(“name”),我可以知道我做错了什么吗

任何帮助都将不胜感激。 谢谢

JSON:

Controller.java

public ResponseEntity<Object> create(@RequestBody Map<String, Object> obj) {
    Product response = myservice.create(obj);
    return new ResponseEntity<Object>(response, HttpStatus.CREATED);
}
通过
obj.get(“name”)
,您可以尝试通过键
name
从json请求的顶级获取值,而它是第二级对象的属性

在伪代码(跳过强制转换和空检查)中,它应该如下所示:
obj.get(“products”)[0].get(“name”)

在Service.java中打印obj内部for循环。您的打印说明,产品,值是一组对象

所以在下面的一行中,obj是顶级对象,不包含“name”字段

String name = (String) obj.get("name");
System.out.println("name: " +name);

如果您调用
obj.get(“产品”)
并尝试将其转换为一个集合,该怎么办?然后尝试从集合中获取第一个索引。它应该包含包含名称键和值的内部对象。

您应该按照您看到的json,按深度(或级别)进行推理

最初,整个json包含在包含两个键值对的
obj
映射中:

(key = "id", value = "af0b86eb-046c-4400-8bc4-0e26042b8f53")
(key = "products", value = [{"productId": "1234", "name": "apple", "price": "383939"}])
由于您对产品详细信息感兴趣,第一步是提取数组
products
,如下所示:

Object [] products = obj.get("products");
现在产品是一个对象数组。由于您知道对象依次是哈希映射,因此可以将每个对象强制转换为映射并访问所需的密钥:

HashMap <String, Object> productOne = (HashMap) products[0];
String productId = (String) productOne.get("productId");
String name = (String) productOne.get("name");
..
HashMap productOne=(HashMap)产品[0];
字符串productId=(字符串)productOne.get(“productId”);
字符串名称=(字符串)productOne.get(“名称”);
..

似乎您在
obj
实例上获得了NPE,请确保它正确连接到您的服务中。如果连接正确,我可以打印obj值哦..如何获取二级对象:(我尝试了这种方法obj.get(“products”)[0].get(“name”),但Java不喜欢这种syntaxI尝试了-Map testobj=(Map)obj.get(“产品”);System.out.println(“值为:”+testobj.get(“名称”));但我得到了这个异常,原因是:java.lang.ClassCastException:java.util.ArrayList与下面的java.util.MapCheck@NiVeR答案不兼容。我尝试过,但得到了同样的异常-不确定为什么自己不难重现问题,但看看那个异常。看起来对象不能强制转换为Map,因为obj.get(“products”)似乎返回列表类型。因此,您应该将其转换为List或ArrayList。您是否在这里使用Spring之类的web框架?我尝试了此操作,但导致此异常的原因是:java.lang.ClassCastException:java.util.ArrayList与[Ljava.lang.Object]不兼容;请更新原始帖子中的代码。
(key = "id", value = "af0b86eb-046c-4400-8bc4-0e26042b8f53")
(key = "products", value = [{"productId": "1234", "name": "apple", "price": "383939"}])
Object [] products = obj.get("products");
HashMap <String, Object> productOne = (HashMap) products[0];
String productId = (String) productOne.get("productId");
String name = (String) productOne.get("name");
..