Raymond created CAMEL-24230:
-------------------------------

             Summary: jsonpath language with writeAsString=true returns Map 
instead of JSON String for object expressions
                 Key: CAMEL-24230
                 URL: https://issues.apache.org/jira/browse/CAMEL-24230
             Project: Camel
          Issue Type: Bug
          Components: camel-jsonpath
            Reporter: Raymond


I have the following json:
{code:java}
{
  "args": {
    "age": 30, 
    "name": "Alice"
  }, 
  "headers": {
    "Accept": 
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
 
    "Accept-Encoding": "gzip, deflate, br, zstd", 
    "Accept-Language": "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7", 
    "Host": "httpbin.org", 
    "Priority": "u=0, i", 
    "Sec-Ch-Ua": "\"Google Chrome\";v=\"149\", \"Chromium\";v=\"149\", 
\"Not)A;Brand\";v=\"24\"", 
    "Sec-Ch-Ua-Mobile": "?0", 
    "Sec-Ch-Ua-Platform": "\"Windows\"", 
    "Sec-Fetch-Dest": "document", 
    "Sec-Fetch-Mode": "navigate", 
    "Sec-Fetch-Site": "none", 
    "Sec-Fetch-User": "?1", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-6a2c1b7f-2c55fb0260804ec036ffb630"
  }, 
  "origin": "178.227.111.11", 
  "url": "https://httpbin.org/get?name=Alice&age=30";
}{code}
And the following jsonpath:

 
{code:java}
$.args 
{code}

The online jsonpath (https://jsonpath.com/) tester gives:

 
{code:java}
[  {    "age": 30,    "name": "Alice"  }]{code}

However when evaluating the same jsonpath in Apache Camel (with jsonpath on the 
classpath):


{code:java}
<setHeaders>
                <setHeader name="NewBody">
                    <jsonpath writeAsString="true">$.args</jsonpath>
                </setHeader>
            </setHeaders> {code}

I get:



{{}}
{code:java}
{age=30, name="Alice"} {code}

{{Thus the values are correct, but the keys not. }}When using the {{jsonpath}} 
expression language with {{writeAsString="true"}} on a query that evaluates to 
a single JSON Object (e.g., {{{}$.args{}}}), {{JsonPathEngine}} returns a 
{{java.util.Map<Object, Object>}} where the values are serialized, rather than 
serializing the entire Map into a valid JSON string.

*Summary*

{{}}

*Expected Behavior:* {{<jsonpath writeAsString="true">$.args</jsonpath>}} 
should return a {{java.lang.String}} containing valid JSON (e.g., 
{{{}{"age":30,"name":"Alice"}{}}}).

{{}}

*Actual Behavior:* It returns a {{java.util.Map}} whose {{.toString()}} 
evaluates to {{{}{age=30, name="Alice"}{}}}.

{{}}

*Possible Root Cause:* In {{{}org.apache.camel.jsonpath.JsonPathEngine{}}}, the 
{{answer instanceof Map}} branch iterates over entries and stringifies 
{{{}entry.getValue(){}}}, but returns the {{Map}} instance itself instead of 
passing the entire {{answer}} object through {{{}adapter.writeAsString(answer, 
exchange){}}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to