json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式

先看数据格式:

可以看到,在value中有双引号。主要对应的key是position 和interests两个部分。

发现position 是单个字符串格式。 interests是对应的json数组的格式。所以分两步解决。

1.解决position对应的问题。

             String str="";   str中是有问题的json数据
        String newstr="";
        String flag1="\"position\":\"";   //标记1:   "position":"    引号也要留着
        String flag2="\",\"interests\":";  //下一个标签的开头作为标记    ","interests":
        int start=str.indexOf(flag1);      //起始位置
        int end=str.indexOf(flag2);        //结束位置
        while(start>0) {

            String conent=str.substring(start+flag1.length(),end);   //将内容切割出来,第一个参数加上flag1的长度是为了找到开始。            conent=conent.replace("\"", "‘");                       //替换双引号为 ’   ,也可替换为其他字符。
            newstr=newstr+str.substring(0,start)+flag1+conent+flag2;  //将content之前的+conten+content后边的
            str=str.substring(end+flag2.length(),str.length());  //将改好的部分从str中分出去

            start=str.indexOf(flag1);                         //重新确定开始和结束
            end=str.indexOf(flag2);
        }
        newstr=newstr+str;                 //加上最后的结尾,,newstr就是正确的数据
        

这就是解决过程,根据 position  的前后内容,把每个value切割出来,替换 " 之后在连接。这个问题解决了。

2.第二步就是解决intersts中的问题,因为这个是json数组形式,其中的数据格式为  " value1","value2","value3"

所以,这个中要用  ",   一起来确定位置。

按照1中过程分解出content就是 下边例子中 [  ] 的内容。

public static String interst(String s) {   //该方法传入的参数为content内容,下边的方法需要调用
        char[] temp = s.toCharArray();         //将内容转化为数组形式。
        int n = temp.length-1;              //结尾肯定是 ”  所以需要分割出去
        int start=1;                        //找到起始位置,没错替换之后还要重新确定起始。起始就是每个双引号的后边
        for(int i=0;i<n-1;i++) {
            if(temp[i] == ‘"‘ && temp[i + 1] == ‘,‘) {
                for(int j=start;j<i;j++) {   //替换内容
                    if(temp[j]==‘"‘) {
                        temp[j]=‘\‘‘;
                    }
                }
                start=i+3;
            }
        }
        for(int j=start;j<n;j++) {
            if(temp[j]==‘\"‘) {
                temp[j]=‘\‘‘;
            }
        }
       // System.out.println(temp);
        return new String (temp);
    }

public static String upexperts(String str) {  //str为json有  ” 的json数据 ,

  newstr="";
  flag1="\"interests\":["; //标记1:
  flag2="]}"; //标记2
  start=str.indexOf(flag1);
  end=str.indexOf(flag2);
  while(start>0) {

  String conent=str.substring(start+flag1.length(),end);
  conent=interst(conent);  //调用上边的方法,将content内容处理,去掉 "
  newstr=newstr+str.substring(0,start)+flag1+conent+flag2;
  str=str.substring(end+flag2.length(),str.length());

  start=str.indexOf(flag1);
  end=str.indexOf(flag2);
 }
  newstr=newstr+str;

}

原文地址:https://www.cnblogs.com/wys-373/p/12287693.html

时间: 2024-07-29 23:59:04

json数据中嵌套 ”(双引号) 导致格式报错的问题,处理方式的相关文章

C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法

这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { "ITEM_ID":"100201709153277", "ITEM_NAME":"抗链球菌溶血素"O"(ASO)测定试剂盒(胶乳免)", "QTY":6, "NOTES":"厂牌(河北恒利集团

cocos2d-x 头文件中添加方法变量导致编译报错

代码如下: HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__ #include "cocos2d.h"class HelloWorld : public cocos2d::Layer{public:    // there's no 'id' in cpp, so we recommend returning the class instance pointer    stati

在xunsearch导入数据中使用explain字段的时候报错

explain为select的查询的关键词,解决办法加上单引号 /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://ddxg:*****@47.92.81.68/soosoogoo_main --sql="select cid,class,function,'explain' from soosoogoo_base_controller" --project=demo

处理Json数据中的日期类型.如/Date(1415169703000)/格式

在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: 1 var jsondate="/Date(1415169703000)/"; 2 var formatdate=eval(jsondate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")); 3 alert(formatda

C# json字符串解析含有双引号

最近在维护一个C#项目,一个ajax请求列表数据没有展示数据. 第一反应就是查看请求有没有数据,于是到后台打断点发现有数据,但是页面没有展示. 此时觉得有点诡异,于是在ajax的error方法里面设置断点,居然进来了,于是打印错误消息,发现是json转换异常. 于是想到可能是有特殊字符,定位到315,发现是字符串中含有双引号. 解决办法想到了在JSONARRAY先将字符串encode,然后在js中在decoder. 经过测试问题解决了!!!

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

求助大神 英文中的双引号

各位大神 英文中的双引号是不是两个一样的 " ??????调用接口的时候返回回来的是Json 取出来就是 "\"0000\"" 这个东东 ToString()后就是 "0000" 现在要过滤掉 有没有什么比较好的方法? 求助大神 英文中的双引号

mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题

前言 将数据从一张表迁移到另外一张表的过程中,通过mysql的concat方法批量生成sql时遇到了一个问题,即进行UPDATE更新操作时如果原表中的字段中包含单引号'或者双引号",那么就会生成不正确的update语句. 原因当然很简单因为update table set xxx = 'content'时content一般由英文单引号'或者双引号"包裹起来,使用单引号较多. 如果content中包含单引号'时我们需要对单引号'进行转义或者将content用双引号括起来,这样双引号&qu

解决scrollView中嵌套编辑框导致不能上下滑动的问题

EditText设置maxLines之后,文本行数超过maxLines,会网上折叠,上下滑动可以浏览所有文本. 若EditText外层有scrollView,在EditText上下滑动,不会像正常情况那样上,只会滑动了scrollView. 解决办法是: mEt_content.setOnTouchListener(this); // 解决scrollView中嵌套EditText导致不能上下滑动的问题 @Override public boolean onTouch(View v, Motio