Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

read-value fails on empty string #31

Open
fmnoise opened this issue May 18, 2020 · 6 comments
Open

read-value fails on empty string #31

fmnoise opened this issue May 18, 2020 · 6 comments

Comments

@fmnoise
Copy link

fmnoise commented May 18, 2020

(j/read-value "")
; => Exception: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input

Is that intentional? Cheshire returns nil for such case. Maybe that can be tuned with object-mapper? 🤔

@fmnoise fmnoise changed the title Reading fails on empty string read-value fails on empty string May 18, 2020
@fmnoise
Copy link
Author

fmnoise commented May 18, 2020

Ahh, I see, empty string is not valid JSON, so probably jsonista implementation is more correct than cheshire.
Good way to see if your project code if JSON-compliant though 🤦

@ikitommi
Copy link
Member

Yes, it's a property of Jackson. There are lot of features that can be set, but with a quick test, at least this doesn't work:

(def allow-nil-object-mapper 
  (doto (j/object-mapper) 
    (.enable com.fasterxml.jackson.databind.DeserializationFeature/ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)))

(j/read-value "" allow-nil-object-mapper)
; Execution error (MismatchedInputException) at com.fasterxml.jackson.databind.exc.MismatchedInputException/from (MismatchedInputException.java:59).
; No content to map due to end-of-input
;  at [Source: (String)""; line: 1, column: 0]

Would also like to know if there is existing thing for this in Jackson or would it require custom Java/Clojure code in jsonista.

@KGOH
Copy link

KGOH commented Jul 9, 2024

@ikitommi also relevant for me

@ikitommi
Copy link
Member

ikitommi commented Jul 9, 2024

PR welcome to add a optional option to enable this, e.g. :empty-string-as-nil. Let's not change the default, as it should not work. From JS:

JSON.parse("")
// VM154:1 Uncaught SyntaxError: Unexpected end of JSON input
//    at JSON.parse (<anonymous>)
//   at <anonymous>:1:6

@KGOH
Copy link

KGOH commented Jul 9, 2024

@ikitommi agree, however, as it is pointed out earlier, the option to disable this doesn't work
#31 (comment)

(jsonista.core/read-value
  ""
  (doto (jsonista.core/object-mapper)
    (.enable com.fasterxml.jackson.databind.DeserializationFeature/ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)))
;; MismatchedInputException: No content to map due to end-of-input at [Source: (String) "" ; line: 1, column: 0]

@ikitommi
Copy link
Member

ikitommi commented Jul 9, 2024

We can add our own options if Jackson doesn't support this. I would start by asking how to do this on the https://github.com/FasterXML/jackson repo how to do this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants