2017-03-03 8 views
2

WebサービスにJavaクライアントを作成していて、レスポンスJSONオブジェクトを解析してMap<String,String>にする必要があります。JavaでこのJSonコンテンツを解析するための最も簡単な方法が必要です

私はJSON形式を制御することはできません。比較的古い既存のアプリにクライアントプラグインするのはメモリホッグで、何百もの他のJavaライブラリ依存関係があります。

私の懸念事項は、クライアントの外部依存関係をできるだけ自由にすることと、メモリの使用量やガベージコレクションを避けるために、最小限のメモリ占有量があることです。

私は私GsonまたはJacksonでこれを行うので、私はJSONを使ったことがない(これらの実行時制約を考慮し最適なアプローチへと入力を探していますすることができます。シンプルで知っているとどのように私は素早く閲覧には表示されませんでした複雑な型を扱う)。

JSONはこのように見えます。私は、属性のセクション名と値のペアについて心配する必要があります。残りの部分は無視することができます。

{ 
    "responseInfo": { 
     "responseMsg": "Success", 
     "timeStamp": "***", 
     "transactionId": "***" 
    }, 
    "callerId": "****", 
    "locale": "en-US", 
    "userId": "***", 
    "attributes":[ 
    { 
     "attributeName": "AN", 
     "attributeDescription": "Account Number", 
     "attributeValue": "*****" 
    }, 
    { 
     "attributeName": "EA", 
     "attributeDescription": "Email Address", 
     "attributeValue": "****@****" 
    }, 
    { 
     "attributeName": "SOI", 
     "attributeDescription": "someotherinfo", 
     "attributeValue": "****" 
    } 
} 

ありがとうございました!

+0

json.orgを使うとどうなりますか? https://mvnrepository.com/artifact/org.json/json/20160810 – alayor

+0

私はJSONobjectを使用してJSONを読み込み、セッターを使ってDAOデータアクセスオブジェクトを作成して、Javaアプリケーションに情報を保存することもできます。それはJSONオブジェクトとして。 http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html getJsonObject( "Key")を使用すると、値を返すことができます。 – JesseBoyd

+0

あなたは書いています**私はJSONフォーマットを支配していません**だから、jsonが受け取ったフォーマットはどのフォーマットでも構いませんし、あなたが問題にしたものは静的フォーマットではありませんか? –

答えて

0

お返事ありがとうございました。参考までにJacksonと一緒にJSonブロック内の名前と値のペアを探すための一般的なパーサーを実装しました。私は、柔軟性と必要なコードの短い量に満足しています。参考のために、これは私が書いたコードです:

final ObjectMapper mapper = new ObjectMapper(); 
    final ArrayType type = mapper.getTypeFactory().constructArrayType(Map.class); 

    try { 
     if (attrBlockName == null || attrBlockName.length() == 0) 
      return mapper.readValue(f, type); 
     JsonNode base = new ObjectMapper().readTree(f); 
     if (base == null) 
      return JSonHttpClientAttributeProvider.PROVIDER_FAILED_UNKNOWN; 
     JsonNode attrJson = base.get(attrBlockName); 
     if (attrJson == null) 
      return JSonHttpClientAttributeProvider.PROVIDER_FAILED_UNKNOWN; 
     Map<String, String>[] mapArray = mapper.readValue(mapper.treeAsTokens(attrJson), type); 
     for (Map<String, String> newmap : mapArray) { 
      if (newmap.containsKey(attrNameField) && newmap.containsKey(attrValueField)) 
       map.put(newmap.get(attrNameField), newmap.get(attrValueField)); 
     } 
     return PROVIDER_SUCCEEDED; 
    } catch (IOException ioe) { 
     throw new MyExceptionClass("Exception occurred during request", ioe); 
    } 
関連する問題