2016-12-06 49 views
-2

大きなテキストファイルがあります。様々な情報との混同より多くの行がJson StringをJAVAの混合文字列から抽出する

私の要件は、混合文字列の行の下からJSONを取得している

ライン:

PID: [0] [STM] [2016-12-01 00:00:00,135] INFORMATION {com.priyan.JsonParser} - My Req Body: { "amountTxn": { "paymentAmt": { "amtReserved": null, "totalAmtCharged": null, "chargingData": { "taxAmt": 10, "categoryCode": "MyApp" }, "totalAmountRefunded": null, "chargingInformation": { "amount": 1.5, "description": ["Test 01 (demo)"] } }, "userId": "tel:+2313215", "txnStatus": "Charged", "origCode": null, "seq": null } } TOKEN ID: 351351 {com.priyan.JsonParser} 

私はこのJSONの一部のみ

{ "amountTxn": { "paymentAmt": { "amtReserved": null, "totalAmtCharged": null, "chargingData": { "taxAmt": 10, "categoryCode": "MyApp" }, "totalAmountRefunded": null, "chargingInformation": { "amount": 1.5, "description": ["Test 01 (demo)"] } }, "userId": "tel:+2313215", "txnStatus": "Charged", "origCode": null, "seq": null } } 
を抽出する必要があります

助けてください、 ありがとう

+1

ファイルの各行は、 "... - 私の要求本文:..."まで同じ形式になっていますか? – SachinSarawgi

+1

このファイルには特定のパターンがありますか? 'PID:... My Req Body:JSON ... TOKEN ...'と同じようにRegexを使うこともできますし、単純にsubStringを使うこともできます。jsonは前もってコードのフォーマットを正確に知っていれば良い '{' '} – AxelH

+0

@SachinSarawgi yes – Priyanka

答えて

3
あなたが望むデータを抽出する正規表現 ^.*Body:\s(.*)\sTOKEN.*を使用することができます

はJSONデータのいずれかの側に隣接言葉は変更されませんし、私は正確に(空白を含む)の単語"Body: "" TOKEN"

を意味提供

この正規表現は、基本的"Body: "" TOKEN"

+0

Notch&Thanks しかし、私はJsonライブラリによって与えられた他のオプションを知る必要があります。 – Priyanka

+1

はい、@CodeRunnerのようにJSON文字列を解析してオブジェクトを作成できるJSONライブラリはほとんどありません。問題は、入力文字列が有効なJSON文字列ではないことです。あなたが第三者のデータからこの文字列を読んでいるなら、あなたはおそらく運が悪いでしょう。 – Rakesh

+0

正しいjson。私もjsonlintのWebサイトでテストしました – Priyanka

2

JSONと同様の構造を持つクラスを作成し、使用ジャクソン[JavaのJSONパーサー(http://jackson.codehaus.org)]ライブラリ間のテキストを抽出します。詳細については、Parsing JSON File Javaを参照してください。

+0

thnkz @CodeRunner – Priyanka

+1

興味のある部分を抽出せずにリンクを投稿してください。 – AxelH

2

これは、必要な2番目の括弧の位置(INFORMATIONとTOKENブロックのため)と部分文字列の位置を見つけます。

基本的に、私は(最初のブラケットの後にブラケットを見つけることによって)2番目のものを探し、最後に同じものを探します。その後、単に文字列を抽出します。

public static void main(String[] args){ 
     String s = "PID: [0] [STM] [2016-12-01 00:00:00,135] INFORMATION {com.priyan.JsonParser} - My Req Body: { \"amountTxn\": { \"paymentAmt\": { \"amtReserved\": null, \"totalAmtCharged\": null, \"chargingData\": { \"taxAmt\": 10, \"categoryCode\": \"MyApp\" }, \"totalAmountRefunded\": null, \"chargingInformation\": { \"amount\": 1.5, \"description\": [\"Test 01 (demo)\"] } }, \"userId\": \"tel:+2313215\", \"txnStatus\": \"Charged\", \"origCode\": null, \"seq\": null } } TOKEN ID: 351351 {com.priyan.JsonParser}"; 
     int begin = s.indexOf("{", s.indexOf("{") + 1); 
     int end = s.lastIndexOf("}", s.lastIndexOf("}") - 1); 
     s = s.substring(begin, end); 
     System.out.println(s); 
    } 

テキストの前および/または後に任意のブラケットを持っていないが、他のパターンに応じて更新することができた場合、このソリューションは動作しません。

+0

thnkz AxelH。これは私のために働いています。このタスクのためにJsonまたはGsonライブラリを使用することはできません。 – Priyanka

+1

StringからJSONを抽出するには、私はそうは思わないが、私はGSONについてすべてを知らない。しかし、本当に必要です、私は抽出が本当に複雑ではないことを意味します。 – AxelH

1

ラインに固定パターンがある場合は、「My Req Body」と「JSON」の間で部品を取得するだけです。それは簡単です。

行に固定パターンがない場合は、最初のインデックス「{」から始めて、JSON文字列を作成するために進むことができます。開いている中括弧の数を数え、同じ数の閉じた括弧に達したときに文字列を取得することを停止する必要があります。文字列の後にgsonのようなライブラリを使用して、有効なJSON文字列であるかどうかを検証できます。

+0

Thnkz Duy Nguyen。 – Priyanka

関連する問題