0

簡単なテンプレートを提供していただければ、別のライブラリを利用できます。解析された JSON からのネストされたマップ出力が望ましいと思います。ありがとう!

関連するコード:

import scala.util.parsing.json.JSON
...
input = [Some file read in; see bottom for result]
val parsed = JSON.parseFull(input)
val parsedMap = (parsed.toList)(0)
println(parsedMap)
println(parsedMap.getClass())
println(parsedMap.keys)

下部にエラーを含む結果:

Map(interaction -> Map(author -> Map(name -> iBuyCell, avatar -> http://a0.twimg.com/profile_images/1751023331/SellingYourCell1_normal.png , ユーザー名 -> iBuyCell, id -> 4.62459933E8, link -> http://twitter.com/iBuyCell )、ソース -> twitterfeed、id -> 1e17bc84c345a800e0742ed998fff162、リンク -> http://twitter.com/iBuyCell/statuses/186347162957918208、コンテンツ -> 電話禁止は警察に挑戦を提示します:チャペルヒルは先週、州と国で唯一の... http://t.co/xVCQMDU7, created_at -> Sun, 01 Apr 2012 07:00:00 +0000, type -> twitter), links -> Map(created_at -> List(Sun, 01 Apr 2012 04:22:36 +0000), retweet_count ->リスト(3.0)、タイトル -> リスト(電話禁止が警察に挑戦 - オレンジ郡 - NewsObserver.com)、url -> リスト(http://www.newsobserver.com/2012/04/01/1970433/police- challenged-by-cell-phone.html))、salience -> Map(content -> Map(sentiment -> -1.0))、language -> Map(tag -> en)、raw_links -> List(http:// bit.ly/HwmJa6)、twitter -> Map(ソース -> twitterfeed、ドメイン -> リスト (bit.ly)、テキスト -> 電話禁止は警察に挑戦: チャペルヒルは先週、州と国で唯一の町になりましたp... http://t.co/xVCQMDU7、リンク -> リスト (http://bit.ly/HwmJa6)、id -> 186347162957918208、created_at -> 2012 年 4 月 1 日 07:00:00 +0000、ユーザー -> マップ (utc_offset -> -14400.0、名前-> iBuyCell, screen_name -> iBuyCell, location -> Text (Bez) Buy Kyts, url -> http://way.to/FreeFones , description -> すぐに現金が必要ですか? 24 時間以内にメールでお問い合わせください。新しい無料の携帯電話が必要な場合は、キャリアとスタイルを選択して、以下の Web サイトをクリックしてください! 2012 年 1 月 12 日 23:58:34 +0000、lang -> en、time_zone -> 大西洋時間 (カナダ)、statuses_count -> 13069.0)))

class scala.collection.immutable.HashMap$HashTrieMap

エラー: 値キーは任意の println(parsedMap.keys) のメンバーではありません

それが役立つ場合、問題の元の JSON は次のとおりです。

チャペルヒルは先週、州と国で唯一の... http://t.co/xVCQMDU7","user":{"created_at":"Thu, 12 Jan 2012 23:58:34 + 0000","description":"すぐに現金が必要ですか? 簡単な見積もりについては、24 時間メールでお問い合わせください。それまでの間、キャリアとスタイルを選択できる新しい無料の携帯電話が必要な場合は、以下の Web サイトをクリックしてください!","followers_count":178,"id":462459933,"id_str":"462459933","lang ":"en","listed_count":1,"location":"Text (Bez) Buy Kyts","name":"iBuyCell","screen_name":"iBuyCell","statuses_count":13069,"time_zone" :"大西洋時間 (カナダ)","url":"http://way.to/FreeFones","

4

2 に答える 2

0

ドキュメントには、 anまたは a のいずれかを保持するparseFullan を返すと書かれています。配列ではなく JSON オブジェクトを解析していることが確実な場合は、次のような方法があります。Option[Any]Array[Any]Map[String, Any]

JSON.parseFull(input).get match {
  case map: Map[String, Any] => {
    // do anything you have to do with the map here, e.g.:
    println(map.keys)
  }
}
于 2013-01-18T03:31:15.330 に答える
0

サンプル JSON をコピーし、それを使用して を初期化し、Stringそれを に渡しましたscala.util.parsing.json.JSON.parseFull。結果は、Option[Any]宣伝どおりです。次にtoList、それOption[Any](この場合は実際には a Some) を使用して、1 つの要素を取得しますList[Any](それが aNoneの場合、空の が取得されますList)。次に、その の最初の (そして唯一の) 要素を選択してList、 を生成しAnyます。

この時点で、Any手元にある (これは何でも構いません...) を使用すると、 type で定義されたメソッドのみを呼び出すことができますAny。当然それは含まれていませんkeys

これを進める方法の 1 つは、Martin Blech が説明しているように、パターン マッチングを使用することです。この種の句は、 (型テスト)と(キャスト)をcase効果的に組み合わせて、型を静的に保持する値を提供します。その時点で、またはのようなメソッドを使用します(および のために定義された他のすべてのメソッド)。isInstanceOf[Type]asInstanceOf[Type]Map[String, Any]keyskeySetMap

最後に、JVM の型消去によりcase、問題の値が他のすべての型と区別できないため、未チェックの型の警告が表示されることに注意してください。Map

于 2013-01-18T04:05:02.563 に答える