进口产品有R标吗JSON为R在引号问题,怎么解决

主题 : json解析双引号问题,在线等
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 52(时)
发自: Web Page
json解析双引号问题,在线等&&&
级别: 精灵王
UID: 72589
发帖: 1611
可可豆: 9020 CB
威望: 11313 点
在线时间: 1573(时)
发自: Web Page
这已经破坏json的格式了,不能称之为json了
解决办法:
1,让后台服务器改,找其他字符替换
2,你本地先解析一次,自己屏蔽掉这些不规范的字符,然后再用json解析器解析。
级别: 精灵王
UID: 72589
发帖: 1611
可可豆: 9020 CB
威望: 11313 点
在线时间: 1573(时)
发自: Web Page
解析依据:找到每个
格式字符串中的a 判断是否有双引号的存在
级别: 精灵王
UID: 226653
发帖: 1963
可可豆: 4647 CB
威望: 4032 点
在线时间: 1140(时)
发自: Web Page
这种json不对吧,必须让后台处理一下, 不然后患无穷。
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
不知道转意字符的吗,给引号转移就可以了,如果觉得字符串有特殊字符,可以进行 URL 编码,然后再加入 JSON
级别: 骑士
UID: 61873
可可豆: 1210 CB
威望: 1176 点
在线时间: 370(时)
发自: Web Page
让服务器那边改,这哪里是JSON格式!!!如果确实是需要aaa有双引号,就返回这样的格式!
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 52(时)
发自: Web Page
已经让服务器改了,谢谢
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 52(时)
发自: Web Page
已经让服务器改了,谢谢
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
字符串长这样:
var s = '{name : ""张三"在提这样"一个"问题"}'
一般字符串转成JSON都是这样转
eval("[" + s + "]")
JSON.parse(s)
这样都不行, 已亲测
最后请问题这样的字符串怎么转成json?
补充, 后台返回的字符串是这样的: {"name" : "\"张三\"在提这样\"一个\"问题"},
但是这样转换:eval('[{"name" : "\"张三\"在提这样\"一个\"问题"}]')依然不行
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
好像你的字符串并不是标准的 json 字符串。需要先转换一下。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你这字符串没法转成JSON。
那是因为反斜杠已经被转义了。
后台传过来的字符串带有一个反斜杠,前端收到这个字符串之后,这个反斜杠就自动被转义了。
要让这个反斜杠存在,字符串必须带有两个反斜杠。
var s = '{name : "\\"张三\\"在提这样\\"一个\\"问题"}';
eval("[" + s + "]");
这样是没问题的。
另外,js编程中并不建议使用eval,最好还是使用JSON.parse,但是这样还会报错。这是因为你这个字符串并非标准的JSON字符串,你的属性name也要加上双引号。
var s = '{"name" : "\\"张三\\"在提这样\\"一个\\"问题"}';
JSON.parse(s);
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。SpringMVC 返回 JSON 引号被转义的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
SpringMVC 返回 JSON 引号被转义的问题
12:14:39 +08:00 · 5917 次点击
我在用 SpringMVC 时候遇到一个小问题, Google 苦搜没有找到结果。
SpringMVC 给 view 返回的 model 中的 value 的引号被转义了。
model 是 ImmutableMap&String, Object&类型
其中一个 key value pair 是这样的:
key: &someString&
value(JSON 格式的字符串): &{\&abc\&: \&xyz\&}&
网页上显示的并不是我想要的 Json 格式的字符串,而是将引号全部变成\&
我感觉是 SpringMVC 配置可能出现了问题,但是一直没找到原因。请问各位如何解决?
14 回复 &| &直到
17:15:16 +08:00
& & 12:22:20 +08:00 via Android
不是做 java 的,但是我看楼主的阐述,感觉这是防 XSS 的功能。
& & 12:22:58 +08:00
读学校网站的 json 数据返回的也是这样,我在 android 端开发,就直接把所有 \ 去掉,再去掉首尾的 “” 。就跟正常 json 数据一样了。
& & 12:28:53 +08:00
value 用 map 就没这问题了
& & 12:29:41 +08:00
或者把 value 转成 json object 塞进去
& & 13:19:45 +08:00
返回类型是 String 还是 Map
& & 13:23:02 +08:00
value 上加注解 @
& & 13:43:36 +08:00
view 用什么模板引擎渲染的?
& & 13:49:29 +08:00
就喜欢你们这些不转义的
& & 13:59:24 +08:00
jstl 跟 spring 标签上都有这个属性的
& & 14:54:08 +08:00
@ view 用 Google Closure Template 渲染的
& & 15:41:50 +08:00
感觉是你的 value 是 String 类型,设成 String 类型会有这个问题
& & 16:48:10 +08:00
&mvc:annotation-driven content-negotiation-manager=&contentNegotiationManager&&
&mvc:message-converters register-defaults=&true&&
&!-- 将 StringHttpMessageConverter 的默认编码设为 UTF-8 --&
&bean class=&org.springframework.http.converter.StringHttpMessageConverter&&
&constructor-arg value=&UTF-8& /&
&!-- 将 Jackson2HttpMessageConverter 的默认格式化输出设为 true --&
&bean class=&org.springframework.http.converter.json.MappingJackson2HttpMessageConverter&&
&property name=&prettyPrint& value=&true&/&
&/mvc:message-converters&
&/mvc:annotation-driven&
&bean id=&contentNegotiationManager&
class=&org.springframework.web.accept.ContentNegotiationManagerFactoryBean&&
&property name=&ignoreAcceptHeader& value=&true& /&
&property name=&defaultContentType& value=&application/json& /&
&property name=&mediaTypes& &
json=application/json
xml=application/xml
&/property&
& & 16:51:53 +08:00
这不是 SpringMVC 的问题,因为你 value 的类型是 String ,所以 Jackson 自然会帮你转义以保证输出后 JSON 的这个字段的类型也是 String 。
你可以把 Value 的类型设置成 JsonNode ,或者其他对象。
你也可以试试 @ 说的`@JsonRawValue`注解。
& & 17:15:16 +08:00
首先你 message converter 用的是啥,然后这个 value 又是怎么写的?不如把那段代码贴出来容易看出问题
& · & 815 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 17ms · UTC 22:55 · PVG 06:55 · LAX 15:55 · JFK 18:55? Do have faith in what you're doing.博客分类:
在jackson中,如果要处理如下的情况:
String json = "{name:\"test\"}";
& Map&String,String& map = new HashMap&String,String&();
& ObjectMapper mapper = new ObjectMapper();
& map = mapper.readValue(json, new TypeReference&HashMap&String,String&&(){});
会发现出错:
org.codehaus.jackson.JsonParseException:
&& Unexpected character ('n' (code 110)): was expecting double-quote to start field name
&& at [Source: java.io.StringReader@7c87c24a; line: 1, column: 3]
其实是因为标准json中,要求键和值其实都是要双引号的.
& 但如果非要设置键值为非双引号不可的话,则需要设置JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES,如下:
String json = "{name:\"mkyong\"}";
Map&String,String& map = new HashMap&String,String&();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
map = mapper.readValue(json,
&&&&&&&&&&&&&&&&&&&&&&&& new TypeReference&HashMap&String,String&&(){});
System.out.println(map);
}
但当然这是不推荐的哦
浏览 25644
浏览: 5970388 次
来自: 广州
有些扩展名为null
非常感谢!!!!!!!!!
https://zhuban.me竹板共享 - 高效便捷的文档 ...
kris_zhang 写道如果有多个@Primary 会怎么样 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'json包含单双引号问题解决方案
原创作品 转载请注明出处
最近项目中 遇到需要JSON传数据 但是某个字段 里面可能含有 双引号和单引号 导致出现错误
为了方便 写了一个工具类,比较好用。
支持&链式&
效果DEMO:
JsonQuotesUtil.js
* 解决json传输数据时存在 同时存在单引号和双引号的问题
* 将 单双引号用不容易在字符串中出现的字符分别替换
* 在后台 分别用过单双引号替换掉即可
* 注:可以传入字符串 也可以传入字符串数组
* author: 明明如月 QQ
* time:日15:33:44
function JsonQuotesUtil()
var defualtSingleQuotePlaceholder=s%0;//默认单引号占位符
var defualtDoubleQuotePlaceholder=d%1;//默认双引号占位符
var singleQuotePlaceholder=defualtSingleQuoteP//单引号占位符
var doubleQuotePlaceholder=defualtDoubleQuoteP//双引号占位符
//设置单引号占位符(建议起不容易出现的字符)
this.setSingleQuotePlaceholder = function(single)
singleQuotePlaceholder=
//设置双引号占位符(建议起不容易出现的字符)
this.setDoubleQuotePlaceholder = function(double)
doubleQuotePlaceholder=
//恢复默认单引号和双引号占位符
this.restoreDefaults = function()
singleQuotePlaceholder=defualtSingleQuoteP
doubleQuotePlaceholder=defualtDoubleQuoteP
//用单引号占位符替换单引号 并返回替换后的字符串
this.replaceSingleQuote=function (str)
if(str instanceof
Array)//如果是数组分别替换
for(var i=0;i
demo.js 使用范例:&/**
* Created by Administrator on
$(function(){
//替换单双引号按钮的点击事件
$(#show).click(function(){
var sourceStr =$(#sourceStr).val();//获取需要替换字符
/* 使用方法1 创建对象并自定义 单双引号占位符
var jsonQuotesUtil = new JsonQuotesUtil().setSingleQuotePlaceholder(%^^).setDoubleQuotePlaceholder(&&);//创建对象(同时自定义单双引占位符)*/
/* 使用方法2 自定义对象并自定义 单双引号占位符
var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符
jsonQuotesUtil.setSingleQuotePlaceholder(%^^);
jsonQuotesUtil.setDoubleQuotePlaceholder(##);*/
// jsonQuotesUtil.restoreDefaults();//恢复默认的单双引号占位符
/* 使用方法3 自定义对象并自定义 单双引号占位符
var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符
var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符
var single =$(#single).val();//获取 单引号占位符
var double = $(#double).val();//获取输入的双引号占位符
if($.trim(single)!=)
jsonQuotesUtil.setSingleQuotePlaceholder(single);//设置单引号占位符
if($.trim(double)!=)
jsonQuotesUtil.setDoubleQuotePlaceholder(double);//设置双引号占位符
var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同时替换单双引号
$(#replaceResult).html(reuslt);//显示替换后的字符串
function arrayTest()//支持数组每个字符串的替换(没有调用)
var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符
var sourceStr = new Array();
sourceStr[0]=dfdfd'
sourceStr[1]=
alert(sourceStr+sourceStr);
var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同时替换单双引号
alert( after:+reuslt);
JsonQuotesUtil Demo.html
&script type=text/javascript src=libs/js/jquery.js&&/script&&script type=text/javascript src=libs/js/JsonQuotesUtil.js&&/script&&script type=text/javascript src=libs/js/demo.js&&/script&请输入带有单双引号的字符串:
This is a simple solution for SingleQuote( ') and DoubleQuote() in json
单引号占位符: & 双引号占位符:
后台解析Util:
* 解决json传输数据时存在 同时存在单引号和双引号的问题
* 将 单双引号用不容易在字符串中出现的字符分别替换
* 在后台 分别用过单双引号替换掉即可
* 注:可以传入字符串 也可以传入字符串数组
* author: 明明如月 QQ
* time:日15:33:44
public class JsonQuotesUtil
String defualtSingleQuotePlaceholder=s%0;//默认单引号占位符
String defualtDoubleQuotePlaceholder=d%1;//默认双引号占位符
public JsonQuotesUtil()
public JsonQuotesUtil(String defualtSingleQuotePlaceholder,
String defualtDoubleQuotePlaceholder)
this.defualtSingleQuotePlaceholder = defualtSingleQuoteP
this.defualtDoubleQuotePlaceholder = defualtDoubleQuoteP
//恢复单引号(字符串)
String restoreSingleQuotes(String str)
return str.replaceAll(defualtSingleQuotePlaceholder, ');
restoreSingleQuotes(String[] strs)//恢复单引号(数组)
for(int i =0;i
Util使用方法:&&&
public class JsonQuotesUtilDemo
public static void main(String args[])
//获取前台传入的参数
String str=This is a simple solution for SingleQuote(s%0) and DoubleQuote(d%1) in json This is a simple solution for SingleQuote(s%0) and DoubleQuote(d%1)
JsonQuotesUtil jsonQuotesUtil = new JsonQuotesUtil(s%0,d%1);
System.out.println(jsonQuotesUtil.restoreSingleAndDoubleQuote(str));

我要回帖

更多关于 进口产品有R标吗 的文章

 

随机推荐