Gson将map转换成JsonObject出现null值

Gson将map转换成JsonObject出现null值Gson将map转换成JsonObject出现null值异常信息:Exceptioninthread”main”java.lang.IllegalStateException:NotaJSONObject:nullatcom.google.gson.JsonElement.getAsJsonObject(JsonElement…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

               Gson将map转换成JsonObject出现null值

 

异常信息:

Exception in thread “main” java.lang.IllegalStateException: Not a JSON Object: null
    at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:84)

Gson doesn’t serialize anonymous classes. Use Map.of to create maps, not subclasses.
当拿到的map是通过初始化赋值得到的时,你可以通过添加type参数来进行Json格式转换。

code:

import com.google.common.collect.Maps;

import com.google.gson.Gson;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test3 {
    private static Gson gson = new Gson();
    private static JsonParser jsonParser = new JsonParser();
    public static final Map<String, String> map = new HashMap<String, String>(){
        {
            put("111", "22");
            put("11", "11");
        }
    };
    public static void main(String[] args) {
        List<Map<String, String>> list = new ArrayList<>();
        Map<String, String> map1 = Maps.newHashMap();
        map1.put("11","11");
        Map<String, String> map2 = Maps.newHashMap();
        map2.put("22","22");
        list.add(map1);
        list.add(map2);
        String s = gson.toJson(list);
        System.out.println(jsonParser.parse(s).getAsJsonArray());
        String s1 = gson.toJson(map1);
        System.out.println(jsonParser.parse(s1).getAsJsonObject());

        Type type = new TypeToken<HashMap<String, String>>() {}.getType();
        String s2 = gson.toJson(map, type); // 通过reflect告知Gson Map键值对的类型

        System.out.println(jsonParser.parse(s2).getAsJsonObject());

        String s3 = gson.toJson(map); //为null
        System.out.println("s3 = " + s3);
        System.out.println(jsonParser.parse(s3).getAsJsonObject());
    }
}

result:

Exception in thread "main" java.lang.IllegalStateException: Not a JSON Object: null
	at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:84)
	at Test3.main(Test3.java:42)
[{"11":"11"},{"22":"22"}]
{"11":"11"}
{"11":"11","111":"22"}
s3 = null

对于ImmutableMap却可以转换json格式

  Map<String, String> of = ImmutableMap.of("11", "22");
        String s4 = gson.toJson(of);
        JsonObject asJsonObject = jsonParser.parse(s4).getAsJsonObject();

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189521.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]

    如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]如何遍历ArrayList集合,并安全删除其中的元素?1、遍历ArrayList集合有三种方式(1)for循环(2)增强for循环,也就是foreach(3)迭代器iterator2、普通for循环遍历删除元素,list集合的大小会变小,而索引也会发生改变,所以利用ffor循环遍历删除元素会漏调某些元素。例如我for循环遍历删除第一个元素,接着按照…

  • 二级java程序设计--Java SDK6.0的下载和操作[通俗易懂]

    二级java程序设计--Java SDK6.0的下载和操作[通俗易懂]二级java程序设计--JavaSDK6.0的下载和操作

  • Java Web项目 图书管理系统「建议收藏」

    Java Web项目 图书管理系统「建议收藏」版权声明:本文为博主原创文章,未经博主允许不得转载2019.5.22更新看到很多人看这个项目我也没想到,不过我现在不在CSDN写文章了,博客地址链接←这是我的博客地址链接GitHub地址链接←这是我的github地址链接里面有我学习Java的过程以及笔记,希望大家一起交流。由于刚刚学习完JSP和Servlet在学习框架之前下你给更加巩固一下前面的知识所以写…

  • python简单代码_gdal python

    python简单代码_gdal python目标:实现GBDT+LR模型代码,并比较和各种RF/XGBoost+LR模型的效果,发现GBDT+LR真心好用啊。内容:构造GBDT+LR步骤训练阶段:1、获取特性信息2、训练GBDT分类器3、遍历GBDT树的叶子节点,拼接成一个常常的一维向量4、训练OneHot编码器5、训练LR模型预测阶段:1、把带预测的特征输入到GBDT2、获得叶子节点,拼接成一个常常的一维向量3、获得OneHot向量4、LR预测结果这里发现了上篇文章的一个错误:就是GBDT树的叶子节点,输

    2022年10月10日
  • PLSQL操作Oracle创建用户和表

    PLSQL操作Oracle创建用户和表1、打开PLSQL,填写用户名和密码(初始有两个用户sys和system,密码是自己安装oracle数据库时定的),Database选择ORCL(默认数据库,oracle中创建的用户就像是mysql中建的数据库,两者有异曲同工之妙)2、登陆成功后在界面的头部可以看到一下信息,最上面的system@ORCL就表示是用户system在登录状态,其中菜单栏的session可以登录、退出…

  • 大盘进入涨势的条件

    大盘进入涨势的条件 春节以来,上证指数120分钟,所有的拐点都在这里了,除了本次,春节以来所有“顶、底”信号全部成功,皆为120分钟的拐点,所以,从周四开始,我就开始提示:不追买《120分钟顶信号》。即便是120分钟不能撼动日线的底部,那么你买在120分钟的顶位置,很显然,也是不对的。 120分钟顶,不追买是首要任务,其次呢,我们重点分析120分钟顶失败的意义。双龙之翼的顶底指标,是震荡类指标,即专门狙杀震荡拐点的…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号