2016-11-30 46 views
1

からフィールドをカットオフ:は、私はこのようなJSON文字列を持つJSON文字列

{"id":"111","name":"abc","ids":["740"],"data":"abc"} 

私はフィールド"ids"をカットしたい、しかし私は["740"]のような値先験的知りません。したがって、例えば、 ["888,222"]などです。目的はフィールドなしのjson文字列を取得することです"ids"

どうすればよいですか? JackMapperを使用する必要がありますか?

EDIT:

IはJackMapperJacksMapper.readValue[Map[String, String]]として(jsonString)to get only fields that I need. But the problem is that "ID" を使用しようとした:それは配列のため[ "740"]は `解析エラーをスロー。だから、解析する前にこのフィールドを切り捨てることにしましたが、それは醜い解決策ですが、理想的にはjson文字列をMapに解析したいだけです。

+0

あなたはどんなプログラミング言語を使っていますか? –

+0

@BrankVictoria:スカラー、タグで示されているように – duckertito

+0

@cchantep:JacksMapper.readValue [Map [String、String]](jsonString) 'として' JackMapper'を使って、必要なフィールドだけを取得しようとしました。しかし、問題は '' ids ':["740"] 'が解析エラーをスローすることです。だから、解析する前にこのフィールドを切り捨てることにしましたが、それは醜い解決策ですが、理想的にはjson文字列をMapに解析したいだけです。 – duckertito

答えて

2

ないJackMapperが何であるかを確認しますが、他のライブラリが許可されている場合は、私の個人的なお気に入りは、次のようになります。

Play-JSON:これが最小であることを

val jsonString = """{"id":"111","name":"abc","ids":["740"],"data":"abc"}""" 
val json = Json.parse(jsonString).as[JsObject] 
val newJson = json - "ids" 

Circe:

import io.circe.parser._ 

val jsonString = """{"id":"111","name":"abc","ids":["740"],"data":"abc"}""" 
val json = parse(jsonString).right.get.asObject.get // not handling errors 
val newJson = json.remove("ids") 

注意悪い入力などを処理しないようにあなたを得るための例

+0

最初の解決策(Play-JSON)の場合は、 'newJson'を' Map [String、String] 'に変換する方法は? – duckertito

+0

私は次のようにしました: 'newJson.fields.toMap.map(v =>(v._1、v._2.toString))' – duckertito

+0

'newJson.value.mapValues(_。toString())' – slouc

関連する問題