自己实现方式,感觉有点繁琐
public static String getValidateJson(String json)
    {
        int index = 0;
        StringBuilder sb = new StringBuilder();
        for(;;)
        {
            int temp = json.indexOf("\":",index);
            if(-1==temp)
            {
                sb.append(json.substring(index));
                break;
            }
            char tc = json.charAt(temp+2);
            sb.append(json.substring(index, temp+2));
            if(tc== '{'||tc=='['||tc=='"')
            {
                index = temp + 2;
                continue;
            }
            else
            {
                sb.append("\"");
                int index2 = json.indexOf("}",temp+2);
                sb.append(json.substring(temp+2, index2));
                sb.append("\"");
                index = index2;
            }
        }
        return sb.toString();
    }

解决方案 »

  1.   

    String head="{\"msg\":{\"FavoMgmtResp\":{\"retcode\":0}},\"ary\":[{\"resp\":{\"msg\":{\"FavoMgmtResp\":{\"retcode\":1}}}}]},";
    System.out.println(head.replaceAll("\"retcode\":(.){1}", "\"retcode\":\"$1\""));
      

  2.   


    不只是retcode一个,还可能有其他的像"setcode":0,"age":22,"id":111,等等只是他们的值没加引号的要加引号,
      

  3.   

    String head="{\"msg\":{\"FavoMgmtResp\":{\"retcode\":0,\"setcode\":0,\"age\":22,\"id\":111}},\"ary\":[{\"resp\":{\"msg\":{\"FavoMgmtResp\":{\"retcode\":1}}}}]},";
    System.out.println(head.replaceAll("(\\d+)", "\"$1\""));
      

  4.   


    感谢提供的方法 $1是第一个捕获组的意思吧,
    我想知道为什么改成这样子就不行了
    head.replaceAll("(^(\\{|\\[|\")&&\\d+)", "\"$1\"")
      

  5.   

    "(^(\\{|\\[|\")&&\\d+)
    这个写的什么意思 
      

  6.   

    replaceAll(":\\s?(\\d+?)", ":\"$1\"")
      

  7.   

    你给的都不具有通用性,如果是“:”后面的字符没加引号的要加上引号,“:”后是{或[的除外
    例如
    {"ls1":{"id":123,"name":aa,"age":22},"ls2":{"id":124,"name":bb,"age":24},"ls3":{"id":125,"name":cc,"age":21}}
    要改成{"ls1":{"id":"123","name":"aa","age":"22"},"ls2":{"id":"124","name":"bb","age":"24"},"ls3":{"id":"125","name":"cc","age":"21"}}这样
      

  8.   


    例如
    {"ls1":{"id":123,"name":aa,"age":22},"ls2":{"id":124,"name":bb,"age":24},"ls3":{"id":125,"name":cc,"age":21}}
    要改成{"ls1":{"id":"123","name":"aa","age":"22"},"ls2":{"id":"124","name":"bb","age":"24"},"ls3":{"id":"125","name":"cc","age":"21"}}这样试了是不可以的
      

  9.   


    String json="{\"ls1\":{\"id\":123,\"name\":aa,\"age\":22},\"ls2\":{\"id\":124,\"name\":bb,\"age\":24},\"ls3\":{\"id\":125,\"name\":cc,\"age\":21}}";
    json=json.replaceAll(":\\s*([^\\[{\"])(.*?)(?=[,|\\]}])", ":\"$1$2\"");
    System.out.println(json);
      

  10.   


    强大,可以解释一下$1$2这个么
    根据json的特点都key:value的形式也就是:后面可以是有空格或无空格的跟着不能是{或者[或者已经有" 因为这类的值都是json对象或json数组或者已经有"了这样的无需加"",也就是:后面要排除掉这些紧跟着可以是任意的字符当值结束要么是跟着,要么是]要么是}所以就得出正则
    :\\s*([^\\[{\"])(.*?)(?=[,|\\]}]至于$1是获取第一个组的就是([^\\[{\"])$2是第二个组的就是(.*?)如果没有$1只有$2那么值就会少掉开头的一个字符了
      

  11.   


    例如
    {"ls1":{"id":123,"name":aa,"age":22},"ls2":{"id":124,"name":bb,"age":24},"ls3":{"id":125,"name":cc,"age":21}}
    要改成{"ls1":{"id":"123","name":"aa","age":"22"},"ls2":{"id":"124","name":"bb","age":"24"},"ls3":{"id":"125","name":"cc","age":"21"}}这样试了是不可以的我还以为你只要数字加呢,字符也加就如同猫的那个一样。
    $1  $2  代表的是grouphttp://baike.baidu.com/link?url=rlVqWRmPxZivbMpVCUMkml1uMzX2lmZpOmX2g64Rh6Y6McTQ9ObcKBNf_ih5PJ68
      

  12.   


    强大,可以解释一下$1$2这个么
    根据json的特点都key:value的形式也就是:后面可以是有空格或无空格的跟着不能是{或者[或者已经有" 因为这类的值都是json对象或json数组或者已经有"了这样的无需加"",也就是:后面要排除掉这些紧跟着可以是任意的字符当值结束要么是跟着,要么是]要么是}所以就得出正则
    :\\s*([^\\[{\"])(.*?)(?=[,|\\]}]至于$1是获取第一个组的就是([^\\[{\"])$2是第二个组的就是(.*?)如果没有$1只有$2那么值就会少掉开头的一个字符了原来是这样感谢解答