Yes, I can see that. What I was looking for is instead a function that says 
"take the string you give me and give me a Json.Value." 

It looks like my only alternative is instead to create the Json.Value out 
of a complex nested structure of Json.Encode.object, and corresponding Elm 
tuples, lists and primitives. This isn't ideal, since what I want to test 
is the real-world scenario of how my code handles the Json strings that are 
going to be coming in, rather than how it handles an involved construct 
that I hope corresponds to those strings.


On Friday, July 29, 2016 at 3:53:36 PM UTC-4, Joey Eremondi wrote:
>
> To be clear, the problem is that "Json.Encode.string" isn't saying "take 
> the string you give me and parse it into JSON", it's saying "take the 
> string you gave me and make it a JSON String".
>
> On Fri, Jul 29, 2016 at 12:51 PM, Nick H <[email protected] 
> <javascript:>> wrote:
>
>> You are on the right track with looking in the Json.Encode module. What 
>> you tried in the REPL is almost correct. Try this instead:
>>
>> > foo = Json.Encode.list []
>> > bar = Json.Decode.decodeValue (Json.Decode.list Json.Decode.string)
>>
>> On Fri, Jul 29, 2016 at 12:29 PM, Paul Blair <[email protected] 
>> <javascript:>> wrote:
>>
>>> Spoke too soon; that doesn't work.  For example:
>>>
>>> > foo = Json.Encode.string "[]"
>>> "[]" : Json.Encode.Value
>>>
>>> > bar = Json.Decode.decodeValue (Json.Decode.list Json.Decode.string) 
>>>  foo
>>> Err "Expecting a List but instead got: \"[]\""
>>>     : Result.Result String (List String)
>>>
>>>
>>> On Friday, July 29, 2016 at 3:10:01 PM UTC-4, Paul Blair wrote:
>>>>
>>>> To answer my own question -- it looks like Native.Json has an identity 
>>>> function which does just what I want, but which I can't import. However, 
>>>> it 
>>>> also looks like many of Json.Encode's functions just call 
>>>> Native.Json.identity. So this works:
>>>>
>>>> data = Encode.string complicatedNestedJson
>>>>
>>>>
>>>>
>>>> On Friday, July 29, 2016 at 2:52:32 PM UTC-4, Paul Blair wrote:
>>>>>
>>>>> I'm using the nested Elm architecture pattern in an application. The 
>>>>> nested components respond to messages coming in on a port. The messages 
>>>>> are 
>>>>> handled by the top-level component before being handed on to the nested 
>>>>> components. So the outer data structure looks something like this:
>>>>>
>>>>> type alias FromServer =
>>>>>   { message_type: MessageType
>>>>>   , data: Json.Decode.Value 
>>>>>   }
>>>>>
>>>>> The data field is a Json.Decode.Value because the top-level component 
>>>>> doesn't know about the message types defined by the nested components; it 
>>>>> does a lookup on the incoming message type and decides to which inner 
>>>>> component it will forward the message. So the top level looks like this:
>>>>>
>>>>> subscriptions : Model.Model -> Sub Message
>>>>> subscriptions model =
>>>>>   theIncomingPort toMessage
>>>>>
>>>>>
>>>>> toMessage : FromServer -> Message
>>>>> toMessage incoming =
>>>>>   case Dict.get incoming.message_type componentDictionary of
>>>>>     Just MyInnerComponent ->
>>>>>       InnerComponentModule.toMessage incoming |> 
>>>>> MyInnerComponentMessageWrapper
>>>>>     Nothing ->
>>>>>       ...
>>>>>
>>>>> The inner component's toMessage function also uses the message_type 
>>>>> field to choose the decoder to apply to the Json.Decode.Value in the data 
>>>>> field.
>>>>>
>>>>> I want to test the inner component's toMessage function. This means 
>>>>> that I need to create a FromServer record with the data contained in a 
>>>>> Json.Decode.Value -- ideally created from a Json string.
>>>>>
>>>>> However, from what I can tell the only way to create this kind of raw 
>>>>> Json.Decode.Value is by passing the string in through a port. This seems 
>>>>> like a pretty complicated way to set up a test. Is there some other way 
>>>>> to 
>>>>> accomplish this?
>>>>>
>>>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Elm Discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected] <javascript:>.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Elm Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to