問題タブ [json4s]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - オブジェクトに json4s/lift-json のフィールドがあるかどうかを確認します
いくつかのフィールドを持つjsonがあり、それらのいくつかが存在するかどうかを確認したい. 値を抽出して JNothing に対してテストしていますが、冗長すぎます。
json4s/lift-json を使用して json オブジェクト内のフィールドの存在を確認するよりコンパクトな方法はありますか? 理想的には次のようなものです:
json - Json4s が奇妙な Json を生成する
これは私が持っているものです:
これは私が得るものです:
しかし、これは私が取り戻したいものです:
ここで何が間違っていますか?
詳細
scala - lift-json XPath \\ 演算子は、一致数に応じて戻り値の型が異なります
同じスキーマを持つデータに対する同じクエリに対して、json \\ "something"
常に同じタイプのオブジェクト (または少なくとも常に同形のもの) を返すことが期待されますが、次の点を考慮してください。
...したがって、n = 0 および n >= 2 のケースは一貫して処理されますが、n = 1 の特殊なケースはJValue
.
なぜこうなった?それは設計によるものですか?
上のマッピングと比較してくださいList
Scala の XML との比較
\\
では、lift-jsonオペレーターが同じセマンティクスを持つことを期待してはならないのはなぜでしょうか?
http://liftweb.net/api/26/api/#net.liftweb.json.packageのドキュメントには次のものがあります。
JSON フィールドを名前でクエリするための XPath に似た式。一致するすべてのフィールドを返します。
json - タプルのリストを JSON オブジェクトにシリアル化する方法
私はList[(String, Any)]
json4sにあり、write(lst)
JSONをシリアライズするために使用しています。順序を維持しながら、これをリストではなく JSON オブジェクトとしてシリアル化するにはどうすればよいですか?
注:オブジェクトにシリアル化されることはわかっていwrite(lst.toMap)
ますが、順序を維持したいと考えています。
scala - 特性 mixin を使用したケース クラスの Json4s サポート
jackson をサポートする json4s を使用して、scala ケース クラスをシリアル化しようとしています。しかし、特性をミックスしようとしているシナリオでは、クラスのシリアル化に失敗します。以下はコード例です。
以下のコードを実行すると、空の中括弧が表示され、値がシリアル化されませんが、trait mixin を削除すると、CrystalFieldInfo 値が適切にシリアル化されます
この問題についての洞察をいただければ幸いです。前もって感謝します
json - Scala で LINQ スタイルのクエリを使用して JSON を解析する
JSON を解析する必要があるとします (以下を参照)。
まず、「ステータス」フィールドを解析してインスタンスを取得していますcase class Status
(以下を参照)。
それは理にかなっていますか?
の型はstatusList
ですList[Status]
。1つのStatus
アイテムが含まれています。解析が失敗した場合、statusList
は空です。好きじゃなくOption[Status]
て欲しいからList[Status]
withList[Status]
に簡単に変換できますが、直接取得したいと思います。Option[Status]
headOption
Option[Status]
json4s
最初に取得 Option[Status]
せずにJSON を解析して取得できList[Status]
ますか?
scala - このScalaステートメントを「脱糖」するにはどうすればよいですか?
Scala での LINQ スタイルのクエリはjson4s
次のようになります。
(2)の仕組みがよくわかりません。このステートメントをどのようにfor
脱糖しますか?
json - キー値文字列を Scala Map に変換する方法
この場合、KV ストア (Redis) からデータを読み取っています。返されるデータは次の形式です。
キーはString
で、値はInt
です。に変換したいMap[String,Int]
json4s JSON APIを調べたところ、現在のコードは次のようになっています。これを行うためのより良い/より簡単な/よりクリーンな方法はありますか?
json - json4s 読み取り逆シリアル化エラーのデバッグ
私が制御できない API を使用しようとしていますが、これは文書化が不十分で、やや一貫性がありません。これは、API が文書化されているものや通常表示されるものとは異なる型を返す場合があることを意味します。この例では、通常は文字列が表示される場所に配列が返された場合を見ていきます。それはくだらない API になりますが、私の本当の問題は次のとおりです。現在、エラーは次のようになっています。
問題を解読した後 ( JValue::toString
JSON 文字列を出力しないのはなぜなのか、非常に困惑しています)、 scase class
のみを処理できるようにしたときに、API が配列を返したことがわかりString
ます。偉大な。私の問題は、オブジェクト モデルと JSON の内容との間の不一致を見つけるのが、本来よりもはるかに難しいように思われることです。
現在、これはデコードエラーを見つけるための私のワークフローです:
- 悪いデータに何らかの識別マーカーがあることを願っています。これが当てはまらない場合は、当て推量であり、不良ビットのように見えるエントリごとに次の手順を繰り返す必要があります。
JArray(List(JString(...), ...))
データを取得した API エンドポイントで JSON を同じ方法でエンコードすることを期待して、エラー メッセージから有効な JSON に変換するという問題を解決します。これが当てはまらない場合は、JSON フォーマッター (jq
) を使用して、すべてのデータを一貫してフォーマットします。- デコード エラーが発生したソース データ内の場所を特定します。
- 配列とオブジェクトをさかのぼって、オブジェクト モデルを変更して、API から返されるデータをより正確に表現する方法を見つけます。
いくつかの背景: 私は C++ から来ており、この目的のために独自の JSON デシリアライゼーション フレームワークを開発しました。私が構築したライブラリを使用した場合の同等のエラーは次のとおりです。
これは、手巻きライブラリを使用するときの私のプロセスです。
std::string
実際に見つかったデータ ( ) と比較して予想されるタイプ ( ) を確認["3c8723eceb1a","cba8849e7a2f"]
し、ソース内のデータのパスのデータ モデルを変更します (result.taskInstances[914].subtasks[5].identifier
)
ご覧のとおり、実際に抱えている問題にすぐに飛びつくことができます。
私の質問は次のとおりです。データ モデルと API から返される結果との間の矛盾をより迅速にデバッグする方法はありますか?
json4s-native_2.10
バージョンを使用して3.2.8
います。
簡単な例:
Scala とは噛み合わないclass
: