0

Scala を使用して解析しようとしているJSONファイルがあります。Scala JSON解析ライブラリを使用して、この形式の 1 つのエントリを解析する方法を見つけました。

{"name":"John","number":"005","fav_colour":"blue"} 

これは機能するコードです:

val result = JSON.parseFull("""{"name":"John","number":"005","fav_colour":"blue"}""")
result match {
  case Some(e) => println(e) 
  case None => println("Failed.")
}

これは印刷しますMap(name -> John, number -> 005, fav_colour -> blue)

コードはこれに基づいています: https://gist.github.com/takezoe/1540223

ただし、次のようなファイルを使用しています。

""" {"name":"John","number":"005","fav_colour":"blue"} {"name":"Mary","number":"010","fav_colour":" yellow"} {"name":"Anna","number":"007","fav_colour":"pink"} {"name":"Dave","number":"003","fav_colour":"紫の"}

"""

注意してください、私もコンマで区切ってみましたが、それでもうまくいきませんでした。

{角かっこで囲まれたエントリ} を区切る関数を作成する必要があるのか​​、 JSONライブラリに不足している機能があるのか​​ 疑問に思っています。これまでのところ、ファイルを渡すと、Some (有効な情報) ではなく None が返されます。

ありがとう!

4

2 に答える 2

1

使用する形式は、ログを保持するなど、時間をかけて情報を収集するのに便利です。

パーサーコンビネーターを再利用することで解析できます!
例えば:

import scala.util.parsing.json.JSON
val parseResult = JSON.rep1(JSON.root)(new JSON.lexical.Scanner("{\"a\": 1} {\"b\": 2}"))
parseResult match {case JSON.Success (result, _) => result; case _ => Nil}

戻り値

List({"a" : 1.0}, {"b" : 2.0})
于 2013-09-08T09:48:00.063 に答える
1

有効な Json ファイルがありません。これは有効です:

[
   {"name":"John","number":"005","fav_colour":"blue"},   
   {"name":"Mary","number":"010","fav_colour":"yellow"},
   {"name":"Anna","number":"007","fav_colour":"pink"}, 
   {"name":"Dave","number":"003","fav_colour":"purple"}
]

結果: Some(List(Map(name -> John, number -> 005, fav_colour -> blue), Map(name -> Mary, number -> 010, fav_colour -> yellow), Map(name -> Anna, number -> 007, fav_colour -> pink), Map(name -> Dave, number -> 003, fav_colour -> purple)))

http://www.scalakata.com/522bdbfeebb25c7f5d823c7d

于 2013-09-08T02:09:15.217 に答える