私は私のApache FLINKプログラムを持っている:ScalaのJSONライブラリが正しく
import org.apache.flink.api.scala._
import scala.util.parsing.json._
object numHits extends App {
val env = ExecutionEnvironment.getExecutionEnvironment
val data=env.readTextFile("file:///path/to/json/file")
val j=data.map { x => ("\"\"\""+x+"\"\"\"") }
/*1*/ println(((j.first(1).collect())(0)).getClass())
/*2*/ println(((j.first(1).collect())(0)))
/*3*/ println(JSON.parseFull((j.first(1).collect())(0)))
}
私は通常のScalaの地図への入力JSONファイルを解析したい
およびそのため私は、デフォルトscala.util.parsing.json._
ライブラリを使用しています。
最初のprintln
ステートメントの出力は、JSON構文解析機能で必要とされるclass java.lang.String
です。
第2のprintln
関数の出力は、実際にJSON文字列の末尾に追加されます("\"\"\""
)。これはJSONパーサにも必要です。
この時点で、コンソールに表示された2番目のprintln
コマンドの出力をコピーしてJSON.parseFull()
関数に渡すと、正しく解析されます。
したがって、第3のprintln
関数は、渡された同じ文字列を適切に解析する必要がありますが、失敗したことを意味する "None"文字列を出力しません。
なぜこれが起こり、どのように機能させることができますか?第二のprintln関数の
その中にあれば、ライブラリにのみJSONを解析し、 this、 '" "" {"name": "punit"} "" "'、フォーム。私の質問の記述で述べたように、prined出力をコピーしてそれをパーサに送ると、それは動作します。しかし、コードではうまくいかず、理由を理解できません。あなたは自分で見るためにこのライブラリを試すことができます。 –
それは私が最後の文で説明するものです。 "{" name ":" punit "}" "" '' {\ "name \":\ "punit \"} "'と同じです: punit "}'は、有効なJSONであり、三重引用符は含みません。三重引用符を含む別の文字列を作成しています。 –
これは 'println(" "{" name ":" punit "}" "") '、' println( "{\" name \ ":\" punit \ "}") 'の出力で見ることができます。あなたの/ * 2 * /。または、 '((j.first(1).collect())(0))==" "{{" name ":" punit "}" "' 'をチェックする。 –