2017-11-27 2 views
0

を解析する正規表現ベースの文字列対解析、JSONの部分はこのようなものです:JSON私はAPIから来る大きなJSONペイロード(〜1メガバイト)を処理する必要が

{ 
    "id": "013dd2a7-fec4-4cc5-b819-f3cf16a1f820", 
    //more attributes 
    "entry_mode": "LDE", 
    "periods": [ 
     { 
      "type": "quarter", 
      "id": "fe96dc03-660c-423c-84cc-e6ae535edd2d", 
      "number": 1, 
      "sequence": 1, 
      "scoring": { 
       //more attribtues 
      }, 
      "events": [ 
       { 
        "id": "e4426708-fadc-4cae-9adc-b7f170f5d607", 
        "clock": "12:00", 
        "updated": "2013-12-22T03:41:40+00:00", 
        "description": "J.J. Hickson vs. DeAndre Jordan (Blake Griffin gains possession)", 
        "event_type": "opentip", 
        "attribution": { 
         "name": "Clippers", 
         "market": "Los Angeles", 
         "id": "583ecdfb-fb46-11e1-82cb-f4ce4684ea4c", 
         "team_basket": "left" 
        }, 
        "location": { 
         "coord_x": 572, 
         "coord_y": 296 
        }, 
        "possession": { 
         "name": "Clippers", 
         "market": "Los Angeles", 
         "id": "583ecdfb-fb46-11e1-82cb-f4ce4684ea4c" 
        } 
       }, 
       //more events 
      ] 
     } 
    ] 
} 

これは、ほぼリアルタイムで私はイベントだけを処理し、一連のイベントUUIDを特定し、データベース内の重複を探し、新しいイベントを保存する必要があるAPIです。

JSONObject/JSONArrayを使用するか、正規表現を使用して文字列解析を行い、イベント部分をフェッチすることができます。一度に複数のペイロードが入る可能性があるため、これはほぼリアルタイムであり、メモリ効率が重要であるため、処理時間は重要です。

このユースケースではどれが効率的ですか?

答えて

0

ストリーミング JSONパーサーを使用してください。あなたがストリームから抜き出したいものを知っていれば、それを解析できなくなった時点を知っているので、ストリームを小さく管理しやすい塊で読んで、完了したらすぐに終了します。

Circa 2017、私はブラウザ/ネイティブJSONストリーミングAPIを認識していないので、Javascriptベースのストリーミングライブラリを見つける必要があります。幸いなことに、ストリーミングは新しい概念ではありませんので、多くのオプションが存在し、すでにあります

  1. http://oboejs.com/
  2. https://github.com/dominictarr/JSONStream
  3. https://github.com/creationix/jsonparse
  4. https://github.com/dscape/clarinet
  5. http://danieltao.com/lazy.js/demos/json/
関連する問題