Comments (10)
Nothing and [] are kind of the same thing
😱
nononooooonoo. Especially in decoding you don't want your parser to make these implicit assumptions. One common situation I can think of is an API call querying a collection.
Now (1) null might mean the collection didn't exist, whereas (2) an empty Array means it's empty. That's a very different thing though. 1) means a programmer error, and 2) means the user should populate it with some data.
Don't surprise me with dynamic coercing behaviour. I can always throw in a fromMaybe []
if I feel like it.
from purescript-simple-json.
Gist example for those reading this thread later: https://gist.github.com/justinwoo/9d0bb67a84c227f327da7171bb7105c2
from purescript-simple-json.
Why not simply use Array a
and live with the serialised key=[]
?
from purescript-simple-json.
I think in this case, having readJSON read from an input and then applying a series of modify
functions should work right? Since the key :: Maybe a -> key :: a
transformations will provide the types there and your end result being some concrete type of a record should work?
e.g.
import Data.Nullable (toMaybe)
type MyThing =
{ a :: String
, b :: Array String
}
json = """
{ "a": "sedf", "b": null }
"""
parse :: String -> E MyThing
parse str = modify (SProxy :: SProxy "b") (fromMaybe [] <<< toMaybe) <$> readJSON str
or something like that?
from purescript-simple-json.
Nothing and [] are kind of the same thing
Probably works if you only use NonEmpty Array everywhere, but not entirely sure if that's what you want in your codebase either
from purescript-simple-json.
@jacereda Sorry, only referring to deserialization.
You're probably right.. unfortunately C# is really loose with nullability so I have a bunch of apis to work with which like to leave off arrays when they're empty, so I'll probably need to write custom ReadForeign
implementations for those records.
from purescript-simple-json.
Is the toMaybe
necessary? Or does the Maybe
instance distinguish between missing and null
?
from purescript-simple-json.
the Maybe
instance is just a hack and shouldn't be relied on at all. As noted in https://github.com/justinwoo/purescript-simple-json#warning-maybe
from purescript-simple-json.
Seems clear enough.. are you suggesting it shouldn't be used or might be removed?
from purescript-simple-json.
Yeah, mostly just shouldn't be used unless you're willing to lock down versions of simple-json (which is the easy part if you use psc-package I guess) and read all the release notes to make sure the behavior wasn't changed again
from purescript-simple-json.
Related Issues (20)
- Enum sum generics example to test/docs HOT 3
- Test example/docs for usage with inferred record types HOT 2
- add String Literal type HOT 1
- "readAsForeign"
- How to use this library with Affjax? HOT 5
- Parsing Foreign Records fails HOT 2
- How to handle arbitrary String Maps/JSON HOT 5
- `read_` :: forall a. ReadForeign a => Foreign -> Maybe a, `readJSON_`
- Use ErrorAtIndex HOT 5
- Handling undefined values HOT 6
- How to readJSON for completely empty input? HOT 3
- Instance for JSDate HOT 2
- Creating enumWriteForeign? HOT 4
- Affjax example does not compile HOT 2
- Quickstart doc doesn't define WithNullable HOT 1
- Mention lack of Tuple parsing in documentation HOT 1
- needs a github actions setup that actually works HOT 2
- Pull requests not accepted from "fake accounts"?
- Provide examples of decoding recursive types HOT 3
- Upgrade to 0.15.0 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from purescript-simple-json.