私の現在のAndroidアプリケーションはJsonデータを保存するためにRealmIOを使用しています。
私は次のRealm insertを使います
backgroundRealm.createOrUpdateAllFromJson(Data.class, rawJson);
私の生のJsonデータはREST APIを介して取得されます
APIはページングをサポートしていますが、後続の呼び出しには前のrawJsonに含まれている最後のIDを渡す必要があります。
これらのJson配列には25000項目があります。 25000項目の配列全体を解析するためのコストは不要です。
最後の配列項目を抽出して最後のId値が何かを検出するために使用できる方法はありますか?
各項目はこれに似ています
{"id":6,"risk":"xxxxxxxxx","active":0,"from":"2016-07-18"}
どのようなオプションがありますか?
rawJson.lastIndexOf( "id")とsubstring()だけなのでしょうか。
回答:
回答№1は1JSON全体を解析しないようにする標準的な方法はありません。一方で、回避することができます。 保存する それはすべてRAMにあり、それをノードに展開します。ストリーミングJSONパーサーを取ります(これらが存在する)そしてあなたが必要とする要素の出来事を監視する。あなたが受け取るこの種の最後のイベントは最後のIDを含みます。
一方、そのスキーマを知っていれば そして JSONのシリアライゼーションフォーマットはそうではありません変更しようとすると(例えば、あなたがそれを制御する)、あなたは最後から解析されていないJSONのテキストをスキャンして、括弧と引用符を数えることによってその値を取り出すことができます。もちろんこれは 脆い 非常に速いけれども、アプローチ。 その脆弱性はスキーマに確実に依存します。探しているリストが別のリストの最後の要素である場合、それが特定のキーの下の値である場合よりもはるかに堅牢であり、マップ内のどこにでも配置できます。
アプリのREST API側を管理している場合は、再考することを検討してください。イベントを最新のものから最古のものへと渡すことで、 最初 構文解析中のイベント、および過去を必要としない場合は残りを安全に破棄します。