Export to GitHub

json-simple - issue #92

bug in get(), ContainerFactory


Posted on Oct 25, 2013 by Massive Horse

Hello,

I have problems parsing the string: {"multicast_id":5195543660248293070,"success":1,"failure":2,"canonical_ids":0,"results":[{"message_id":"0:1382740990960684%921c249af9fd7ecd"},{"error":"InvalidRegistration"},{"error":"InvalidRegistration"}]}

I'd like to have key=>value like: success=>1 failure=>2 results=>[{"message_id":"0:1382740990960684%921c249af9fd7ecd"},{"error":"InvalidRegistration"},{"error":"InvalidRegistration"}]

But get("results") returns: [{message_id=0:1382739363231902%921c249af9fd7ecd}, {error=InvalidRegistration}, {error=InvalidRegistration}] As you see, the "" got lost and : became =

So I cannot continue parsing results to 0=>{message_id=0:1382739363231902%921c249af9fd7ecd} 1=>{error=InvalidRegistration} 2=>{error=InvalidRegistration}

Please test this function and try to find a solution:

public static void func()
{

    String str="{\"multicast_id\":5375760673945275273,\"success\":1,\"failure\":2,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1382739363231902%921c249af9fd7ecd\"},{\"error\":\"InvalidRegistration\"},{\"error\":\"InvalidRegistration\"}]}";
    System.out.println("original: "+str);

    JSONParser parser = new JSONParser();
    ContainerFactory containerFactory = new ContainerFactory(){
        public List creatArrayContainer() {
            return new LinkedList();
        }


        public Map createObjectContainer() {
            return new LinkedHashMap();
        }
    };

    try{
        Map json = (Map)parser.parse(str, containerFactory);
        System.out.println("wtf: " + json.get("results"));

        /*
        String res = json.get("results").toString();
        JSONParser parser2 = new JSONParser();
        Object obj=parser2.parse(res);
        JSONArray array=(JSONArray)obj;
          for(int a = 0; a < array.size(); a++)
              System.out.println("results["+a+"] = "+array.get(a));
          */

    }

    catch(ParseException pe){
        System.out.println(pe);
    }
}

Thanks.

Comment #1

Posted on Jul 15, 2014 by Helpful Panda

(No comment was entered for this change.)

Status: Invalid

Labels:
Type-Defect Priority-Medium