user3249763
user3249763

Reputation: 127

JsonParseException, incorrect character not in JSON

I am trying to process a JSON of the following format in Java.

    String flowJSON = "{\"FlowDTO\":[{\"policyName\":\"Firewall\",\"action\":\"DROP\",\"sourceIp\":\"ANY\",\"destinationIp\":\"ANY\",\"datapathId\":\"8506829779379520\",\"sourcePort\":\"ANY\",\"destinationPort\":\"78\",\"protocol\":\"TCP\",\"priority\":\"0\",\"rateLimiter\":\10000\"}]}";

JsonNode root = mapper.readTree(flowJSON); 

For the above code, I am getting the below error. However, I don't understand why the incorrect character is '@' when I do not have that character in my JSON. Am I not reading this error correctly?

[2014-08-15 14:44:37.095] ERROR POLLtimer                    System.err                                                        com.fasterxml.jackson.core.JsonParseException: Unexpected character ('@' (code 64)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
[2014-08-15 14:44:37.095] ERROR POLLtimer                    System.err                                                         at [Source: java.io.StringReader@4e511927; line: 1, column: 214] 
[2014-08-15 14:44:37.096] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1378) 
[2014-08-15 14:44:37.096] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:599) 
[2014-08-15 14:44:37.096] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:520) 
[2014-08-15 14:44:37.097] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleUnexpectedValue(ReaderBasedJsonParser.java:1387) 
[2014-08-15 14:44:37.097] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:678) 
[2014-08-15 14:44:37.097] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:194) 
[2014-08-15 14:44:37.098] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeArray(JsonNodeDeserializer.java:230) 
[2014-08-15 14:44:37.098] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:202) 
[2014-08-15 14:44:37.099] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:58) 
[2014-08-15 14:44:37.099] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15) 
[2014-08-15 14:44:37.099] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2793) 
[2014-08-15 14:44:37.100] ERROR POLLtimer                    System.err                                                         at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1659) 
[2014-08-15 14:44:37.100] ERROR POLLtimer                    System.err                                                         at com.hp.sf.impl.fucms.PollFlowTimerTask.run(PollFlowTimerTask.java:95) 
[2014-08-15 14:44:37.101] ERROR POLLtimer                    System.err                                                         at java.util.TimerThread.mainLoop(Timer.java:555) 
[2014-08-15 14:44:37.102] ERROR POLLtimer                    System.err                                                         at java.util.TimerThread.run(Timer.java:505) 

Upvotes: 0

Views: 6354

Answers (2)

Paul
Paul

Reputation: 141839

You're missing a double quote here: \"rateLimiter\":\10000\".

The \100 is being treated as a single character expressed in octal. If you look at an ascii table you'll see that character 64 (100 in octal) is an @ symbol. So you're string contains "rateLimiter":@00" instead of "rateLimiter":"10000"

Upvotes: 4

Hypino
Hypino

Reputation: 1248

The last number in your string is missing a quote:

\10000\"

to

\"10000\"

You can use http://jsonlint.com/ in the future for JSON validation.

Upvotes: 1

Related Questions