我是Elm的新手,我很难将json从html解析为elm并使用它。
这就是我想要做的:
在我的html文档中:
d_name
然后在榆木里:
var app = Elm.Main.init({
node: document.getElementById("app"),
flags: questions
});
我的json看起来像这样:
main =
Browser.element { init = init, update = update, subscriptions = subscriptions, view = view }
-- MODEL
type alias Model =
{
questionsToAnswer: List QuestionToAnswer
, currentQuestion: Int
, initializeGame: Bool
}
type alias QuestionToAnswer =
{
question: String
, a: String
, b: String
, c: String
, d: String
, answer: String
}
questionDecoder : Decoder QuestionToAnswer
questionDecoder =
map6 QuestionToAnswer
(field "question" string)
(field "A" string)
(field "B" string)
(field "C" string)
(field "D" string)
(field "answer" string)
init : Json.Decode.Value -> (Model, Cmd Msg)
init questions =
(Model (getQuestions questions) 0 True, Cmd.none)
getQuestions : Json.Decode.Value -> List QuestionToAnswer
getQuestions questions =
case(decodeValue questionDecoder questions) of
Ok question ->
[question]
_ ->
[ QuestionToAnswer "me" "me" "me" "me" "me" "me"]
我在视图中将所有响应输出为debug.toString,以查看发生了什么,因为我也不知道如何记录以前产生的错误。编译器说我对getQuestions问题的调用会产生一个Json.Decode.error,我觉得很难相信,因为我认为一切对我来说都很好。
错误:
“ {\” question \“:\”在流氓行话中,如果您像金丝雀一样唱歌,您在做什么?\“,\” A \“:\”冒充Sinatra \“,\” B \ “:\”与警察交谈\“,\” C \“:\”杀死敌人\“,\” D \“:\”在马匹上打赌\“,\” answer \“:\” B \“ }“期望对象名为
的对象{ "question": "In mobster lingo, if you 'sing like a canary' what are you doing?", "A": "impersonating Sinatra", "B": "talking to the cops", "C": "killing an enemy", "D": "betting on horses", "answer": "B" }
答案 0 :(得分:3)
您似乎正在以GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info
的形式传递字符串,而不是JSON对象。如果是这样,您可以执行以下两项操作之一:
1:在JavaScript端解析JSON字符串,然后通过flags
将其传递给Elm:
flags
这种方法的缺点是,如果解析期间发生错误,则该错误发生在JavaScript端,必须在那儿进行处理。如果您需要处理Elm中的错误,则必须将一个更复杂的结构传递给var app = Elm.Main.init({
node: document.getElementById("app"),
flags: JSON.parse(questions)
});
,该结构既可以表示错误,也可以表示成功。
2:使用flags
代替decodeString
,并相应地更改decodeValue
和init
的类型:
getQuestions