NutzCN Logo
问答 关于将获取的对象转json的问题
发布于 2794天前 作者 qq_6c186ef5 1906 次浏览 复制 上一个帖子 下一个帖子
标签:

我用Json.toJson(Object obj)这个放过获取到的json数据为什么会有换行符和转义字符,我不需要json字符串,我要的是一个json对象,最后的格式是这样的
{"msg":"{\n "desc" :"接口获取成功",\n "state" :1,\n "cont" :{\n "desc" :"数据获取成功",\n "status" :1,\n "data" :[{\n "brandName" :"魅族",\n "brandDetail" :"魅族科技术最早是做MP3的,啊啊啊,后来就开始做只能手机了,手机还行,就是系统稍微有点问题",\n "brandWebUrl" :"http://www.meizu.com/",\n "brandLogo" :"http://www3.res.meizu.com/static/cn/index/images/logo-new-toggle_294da7f.png",\n "remark" :"这就是大名鼎鼎的魅族",\n "id" :1\n }, {\n "brandName" :"Apple(苹果)",\n "brandDetail" :"主营手机和电脑,以及其他高科技产品 \t",\n "brandWebUrl" :"http://www.Apple.com/cn",\n "brandLogo" :"http://p4.so.qhmsg.com/bdr/200_200_/t0143397d25b4f46c9e.jpg",\n "remark" :"美国Apple科技股份有限公司",\n "id" :7\n }, {\n "brandName" :"海尔",\n "brandDetail" :"海尔集团创立于1984年,产品从1984年的单一冰箱发展到拥有白色家电、黑色家电、米色家电在内的96大门类15100多个规格的产品群,并出口到世界100多个国家和地区。2004年,海尔全球营业额突破1016亿元。\t\t \t",\n "brandWebUrl" :"http://www.ehaier.com",\n "brandLogo" :"http://p0.so.qhmsg.com/bdr/200_200_/t016601595569a55265.jpg",\n "remark" :"海尔兄弟",\n "id" :8\n }, {\n "brandName" :"小米",\n "brandDetail" :"小米还是攒劲\t \t",\n "brandWebUrl" :"http://www.xiaomi.com",\n "brandLogo" :"http://pic40.nipic.com/20140403/18336139_174553612155_2.jpg",\n "remark" :"小米小雷科技",\n "id" :9\n }, {\n "brandName" :"vivo",\n "brandDetail" :"手机确实还行 \t",\n "brandWebUrl" :"http://www.vivo.vom",\n "brandLogo" :"http://i1.qhmsg.com/dr/270_500_/t01d4832591e08c78ef.jpg?size=200x200",\n "remark" :"vivo拍照手机",\n "id" :10\n }, {\n "brandName" :"华为",\n "brandDetail" :"华为很吊\t \t",\n "brandWebUrl" :"http://www.huawei.com/cn",\n "brandLogo" :"http://p4.so.qhmsg.com/bdr/200_200_/t0132cf1c606c8824b4.jpg",\n "remark" :"华为小任科技",\n "id" :11\n }]\n }\n}"}

nutz有没有转json对象的方法

13 回复

因为你传入的是个字符串

来自炫酷的 NutzCN

不是呀,我传入的是一个map

我知道了
Json.toJson(obj, JsonFormat.compact());
你要这样使用才行。否则你会看到换行的

一般在不传递第二个参数的时候,是好看,好调试,在真正使用的时候,都要加上JsonFormat.compact()参数才行。我以前遇到过这问题。

@qq_16dd5808 入口方法?然后自行转json?

来自炫酷的 NutzCN

nutz没错的。只不过他在使用json的时候,由于没有传递JsonFormat.compact()参数,所以会有\n。
我以前遇到的场景就是,我toJson(map),然后给设备使用,设备拿到后,发现解析错误,因为他只拿第一行。所以加上JsonFormat.compact()参数,就使得JSON字符串是一行,这样给设备就没问题了。

如果是入口方法,直接返回map,不要自行toJson

来自炫酷的 NutzCN

如果不使用JsonFormat.compact()参数,你在控制台看,会换行的。这样方便调试。
个人建议,toJson方法默认紧凑模式无换行就好了,就不会出现这种错误了

@qq_6c186ef5 你可以看
http://nutzam.com/core/json/to.html
文档,

Json.toJson(pet, JsonFormat.compact()); // 紧凑模式 -- 无换行,忽略null值
Json.toJson(pet, JsonFormat.full());    // 全部输出模式 -- 换行,不忽略null值
Json.toJson(pet, JsonFormat.nice());    // 一般模式 -- 换行,但忽略null值
Json.toJson(pet, JsonFormat.forLook()); // 为了打印出来容易看,把名字去掉引号
Json.toJson(pet, JsonFormat.tidy());    // 不换行,不忽略空值

我最喜欢的3个方法

actived -- 仅输出哪些的key,默认为null,即允许所有key. 注意,这是正则表达式!

Json.toJson(pet, JsonFormat.full().setActived("^(name|id|location)$"); // 仅输出name/id/location,其他key都不输出

locked -- 与actived刚好相反, 不输出哪些的key,默认为null,即允许所有key. 注意,这是正则表达式!

Json.toJson(pet, JsonFormat.full().setLocked("^(location)$"); // 不输出location,其他key正常输出

dateFormat -- 日期格式

Json.toJson(pet, JsonFormat.full().setDateFormat("yyyyMMdd"); // 将输出类似于 {"b":"20190823"}

不是,我是在方法中转的,入口方法中是使用注解声明了@Ok("json")

@wendal 那个setDateFormat要是能针对某个属性就好了,
某些场景下,一个对象中有多个日期时间属性
例如
birthday、created。我在转换json的时候,想生日属性是yyyy-MM-dd,创建时间属性是yyyyMMddHHmmss,然后还有其他属性是long的形式。

{
birthday:'yyyy-MM-dd',
created:'yyyyMMddHHmmss',
xxx:1987456212
}

@qq_6c186ef5
上 代码 总感觉你弄错了

@qq_16dd5808 感谢,我试试

添加回复
请先登陆
回到顶部