2

興味のある値を運ぶさまざまなフィールド名を持つjsonがあります。それらはさまざまなソースから来ています。興味のある分野を 1 つの通称にまとめたいと考えています。例えば:

これは生のjsonです:

{"movieName":"A","Leadactor":"","leadActress":"","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"","Leadactor":"","leadActress":"","movieTitle":"B","hero":"B1","heroine":"B2","source":"Netflix"}
{"movieName":"C","Leadactor":"C1","leadActress":"C2","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"D","Leadactor":"D1","leadActress":"D2","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"","Leadactor":"","leadActress":"","movieTitle":"E","hero":"E1","heroine":"E2","source":"Netflix"}

ソース imdb の場合、関心のあるフィールドは、ソース ネットフリックスの関心のあるフィールドとは異なります。私の最終的な目標は、それらをフロントエンドのテーブルに表示することです。だから、自分の興味のある分野を共通の分野に取り込もうとしています。

私はそれをに変換したい:

{Name:"A",Actor"A1",Actress"A2","source":"IMDB"}
{Name:"B",Actor"B1",Actress"B2","source":"Netflix"}
{Name:"C",Actor"C1",Actress"C2","source":"IMDB"}
{Name:"D",Actor"D1",Actress"D2","source":"IMDB"}
{Name:"E",Actor"E1",Actress"E2","source":"Netflix"}

私が考えている解決策は、正規表現を使用して空の値を持つすべてのフィールドを削除し、movieName と movieTitle を Name に置き換えることです。他の分野も同様。

この問題を処理するためのより良い方法はありますか。

4

4 に答える 4

1

JSONには文脈自由文法があります。そして、REGEXはそのような文法を確実に解析することができません。

たとえば、このJSONは正規表現で確実に解析することはできません。

{movie : "Apocalypse Now", director : {first_name: "Francis", last_name: "Ford Coppola"}}

中括弧がネストされているため、正規表現は式全体で閉じるものとして最後の括弧の隣に一致します。つまり、ネストされた式(JSON、XML、javascriptなど)がある場合は、正規表現では処理できないため、特殊なパーサーを使用します。

于 2013-03-21T17:35:29.523 に答える
1

json-simpleJacksonなどのJSONストリーミングパーサーを使用します。

それらは本当に高速で、メモリ効率が高く、エンコーディングの問題を大幅に軽減し、あなたのような単純な構造に簡単に実装できます。

于 2013-03-21T17:28:54.883 に答える
1

独自の JSON "adder?" を作成することで、これを簡単に行うことができます。json.orgに優れたJSONライブラリがある場合、コードは次のようになります。

    public static void addJSON(JSONObject one, JSONObject two){
    while(one.keys().hasNext()){
        String key = (String) one.keys().next();
        try{
            if(one.getString(key).equals("")){
                one.put(key, two.get(key));
            }
        }catch(JSONException e){

        }
    }

}
于 2013-03-21T17:27:05.447 に答える
1

私のアドバイスは、gson と上記の JSON 文字列を次のような Map に変換することです。

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> map =
                 gson.fromJson("{'key1':'foo','key2':'bar', 'key3', ''}", type);

マップを取得したら、単純に反復して、空の値を持つすべての要素を削除します。その後、このマップから JSON 文字列を生成できます。

于 2013-03-21T17:27:07.680 に答える