From 4040634a7115ff7362e700879c2438b060d68e4a Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Wed, 25 Nov 2015 14:16:45 +0100 Subject: [PATCH] String quote style is serialized #154 --- .../jayway/jsonpath/internal/filter/ValueNode.java | 12 ++++++++++-- .../java/com/jayway/jsonpath/FilterCompilerTest.java | 6 ++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java index 1b0c099f..dc4e8ac0 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java @@ -395,11 +395,18 @@ public abstract class ValueNode { public static class StringNode extends ValueNode { private final String string; + private boolean useSingleQuote = true; private StringNode(CharSequence charSequence, boolean escape) { if(charSequence.length() > 1){ - if(charSequence.charAt(0) == '\'' && charSequence.charAt(charSequence.length()-1) == '\''){ + char open = charSequence.charAt(0); + char close = charSequence.charAt(charSequence.length()-1); + + if(open == '\'' && close == '\''){ + charSequence = charSequence.subSequence(1, charSequence.length()-1); + } else if(open == '"' && close == '"'){ charSequence = charSequence.subSequence(1, charSequence.length()-1); + useSingleQuote = false; } } string = escape ? Utils.unescape(charSequence.toString()) : charSequence.toString(); @@ -436,7 +443,8 @@ public abstract class ValueNode { @Override public String toString() { - return "'" + Utils.escape(string, true) + "'"; + String quote = useSingleQuote ? "'" : "\""; + return quote + Utils.escape(string, true) + quote; } @Override diff --git a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java index 1f2382f3..b1b6039b 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java @@ -48,6 +48,12 @@ public class FilterCompilerTest { } + @Test + public void string_quoute_style_is_serialized() { + assertThat(compile("[?('apa' == 'apa')]").toString()).isEqualTo("[?('apa' == 'apa')]"); + assertThat(compile("[?('apa' == \"apa\")]").toString()).isEqualTo("[?('apa' == \"apa\")]"); + } + @Test public void invalid_filters_does_not_compile() {