2017-01-16 13 views
2

"bla-b"のエンコーディングはなぜ機能するのですか?一方json4s - 単純な文字列値の解析が失敗する

scala> import org.json4s._ 
import org.json4s._ 

scala> import org.json4s.native.JsonMethods._ 
import org.json4s.native.JsonMethods._ 

scala> import org.json4s.JsonDSL._ 
import org.json4s.JsonDSL._ 


scala> parse(compact(render("bla-b"))) 
org.json4s.ParserUtil$ParseException: expected field or array 
Near: "bla-b" 
    at org.json4s.native.JsonParser$Parser.fail(JsonParser.scala:207) 
    at org.json4s.native.JsonParser$$anonfun$1.newValue$1(JsonParser.scala:155) 
    at org.json4s.native.JsonParser$$anonfun$1.apply(JsonParser.scala:164) 
    at org.json4s.native.JsonParser$$anonfun$1.apply(JsonParser.scala:117) 
    at org.json4s.native.JsonParser$.parse(JsonParser.scala:105) 
    at org.json4s.native.JsonParser$.parse(JsonParser.scala:53) 
    at org.json4s.native.JsonMethods$class.parse(JsonMethods.scala:11) 
    at org.json4s.native.JsonMethods$.parse(JsonMethods.scala:62) 
    ... 35 elided 

scala> compact(render("bla-b")) 
res9: String = "bla-b" 

、これはエラーなしで実行:

scala> parse(compact(render("joco" -> "bla-b"))) 
res5: org.json4s.JValue = JObject(List((joco,JString(bla-b)))) 

答えて

2

としてはorg.json4s.native.JsonMethods.parse()ためdocsで述べている:

有効なJSON内部AST形式

に解析することができます

有効なJSONは、nのコレクションame/valueの組(オブジェクト)または順序付けられた値のリスト(配列)。詳細はthis answerを参照してください。

bla-bは有効なJSONではありません。しかし、["bla-b"]または{"joco":"bla-b"}は有効なJSONです。そう、それは無効なJSONを生成することができますJStringのようなだけでなくJObjectまたはJArrayだけでなく、他のJValueのインスタンスをレンダリングすることができますいくつかの理由についてはorg.json4s.native.JsonMethods.render()

。そのことについて開発者に尋ねることをお勧めします( you already did)。

bla-bに無効なJSONをレンダリングすると、解析してこのエラーが発生します。

+0

ミクセルの説明に感謝します。 – jhegedus

関連する問題