Javaで子の順序を無視して2つのJSONオブジェクトが等しいかどうかをテストする


233

特にWebサービスから返されるJSONのユニットテストのために、子の順序を無視して2つのJSONオブジェクトの比較をサポートするJSON解析ライブラリを探しています。

主要なJSONライブラリのいずれかがこれをサポートしていますか?org.jsonライブラリは単に参照比較を行います。


1
両方のオブジェクトを文字列表現にシリアル化して比較することはできませんか?私はすべてのライブラリtoString()がオブジェクトをJSON文字列に変換することをサポートしていると思います。
Teja Kantamneni 2010

47
これは、文字列との間のシリアル化の順序が常に同じであることを前提としています。私はその仮定をするのが苦手です。
ジェフ

あなたは正しいジェフです、それはまったく安全ではありません。このテストは、マッピングは同じですが、toString()が同じ出力を返さないシナリオを示しています:gist.github.com/anonymous/5974797。これは、基になるHashMapが大きくなる可能性があるためです。キーを削除しても、HashMapの内部配列は縮小されません。
Guillaume Perrot 2013

回答:


84

一般的なアーキテクチャのポイントとして、私は通常、特定のシリアル化フォーマットへの依存をストレージ/ネットワーク層を超えて流出させないことをお勧めします。したがって、最初に、JSONマニフェストではなく、独自のアプリケーションオブジェクト間の同等性をテストすることを検討することをお勧めします。

そうは言っても、私は現在、Jacksonの大ファンです。ObjectNode.equals()実装の私のクイックリードは、必要なセットメンバーシップの比較を行うことを示唆しています。

public boolean equals(Object o)
{
    if (o == this) return true;
    if (o == null) return false;
    if (o.getClass() != getClass()) {
        return false;
    }
    ObjectNode other = (ObjectNode) o;
    if (other.size() != size()) {
        return false;
    }
    if (_children != null) {
        for (Map.Entry<String, JsonNode> en : _children.entrySet()) {
            String key = en.getKey();
            JsonNode value = en.getValue();

            JsonNode otherValue = other.get(key);

            if (otherValue == null || !otherValue.equals(value)) {
                return false;
            }
        }
    }
    return true;
}

このメソッドは対称ではありません。等価ではなく、子の「サブセット」関係のみをテストするためです。「その他」のオブジェクトには、_childrenにある子よりも多くの子があり、このメソッドはtrueを返します。
Yoni

23
@ヨニ:サイズ比較があるため、真実ではありません。彼らはまったく同じ数の子供と同じ子供を持っている必要があります。@Jolly Roger:この場合、JSONからPOJOにオブジェクトをシリアル化していませんが、JSONにシステムを送信する場合、送信したのとまったく同じ形式でオブジェクトを送信することはできません。それ。
ジェフ

1
@ジェフこれはあなたのために働きましたか?junitでは、assertEqualsが失敗します。プロジェクトは古いバージョン(1.5)のfyiを使用しています。
ronnyfm 2015

1
JSONをアサートしていない場合、高レベルのテストが欠落していると思います。httpリクエストを作成し、予想されるJSONで応答するシンテストを作成できます。これは、Webサービスの主な機能動作です。
モグロナロール2016

パフォーマンスに関するちょっとした注記: 'value'を 'otherValue'と比較するコードは、(value.equals(other.get(key))がfalseを返す場合に簡略化できます。'value 'はnullではなく、 JsonNodeのequals()メソッドはnull引数を受け入れる必要があります
Tillmann

154

SkyscreamerのJSONAssertをお試しください。

その非厳密モードでは、あまり脆く二つの主要な利点があります。

  • オブジェクトの拡張性(たとえば、期待値が{id:1}の場合でも、これは{id:1、moredata: 'x'}を渡します)。
  • 配列の順序が緩い(例['dog'、 'cat'] == ['cat'、 'dog'])

strictモードでは、json-libのテストクラスのように動作します。

テストは次のようになります。

@Test
public void testGetFriends() {
    JSONObject data = getRESTData("/friends/367.json");
    String expected = "{friends:[{id:123,name:\"Corby Page\"}"
        + ",{id:456,name:\"Solomon Duskis\"}]}";
    JSONAssert.assertEquals(expected, data, false);
}

JSONAssert.assertEquals()呼び出しのパラメーターは、expectedJSONStringactualDataString、およびisStrictです。

結果メッセージはかなり明確です。これは、非常に大きなJSONオブジェクトを比較するときに重要です。


18
私はこのソリューションを使用してきましたが、あなたが選択したJSONCompareModeを提供することもできることがわかりました。その1つはNON_EXTENSIBLEです。したがって、次のようなものに JSONAssert.assertEquals(expected, data, JSONCompareMode.NON_EXTENSIBLE);なります。NON_EXTENSIBLEモードでは、新しいフィールドや欠落しているフィールドが原因でエラーが発生しますが、順序は原因ではありません。falseを使用すると、余分な要素や欠落している子要素を報告しない寛大なモードが開始されます。
ダン寺院

1
NON_EXTENSIBLE比較モードはまさに私が探していたものです。ダン、ありがとう。
ThoughtCrhyme

興奮する前に:これはネストされたJSONオブジェクトと配列もサポートしますか?:)
クリスチャン

2
人々は取るしたい場合があり、このJSONassertの問題をライブラリを使用する前に、アカウントに:それは、現在のライブラリの依存関係を持つ可能性のあるライセンスの問題があることを示しています。
Chriki、2015

3
JSONAssertの問題#44は、PR 67のクリーンルームライブラリの置き換えで修正され、本日JSONAssert 1.4.0としてリリースされました。
カーターページ

49

GSONの使用

JsonParser parser = new JsonParser();
JsonElement o1 = parser.parse("{a : {a : 2}, b : 2}");
JsonElement o2 = parser.parse("{b : 2, a : {a : 2}}");
assertEquals(o1, o2);

編集:GSON v2.8.6以降、インスタンスメソッドJsonParser.parseは非推奨になりました。静的メソッドを使用する必要がありますJsonParser.parseString

JsonElement o1 = JsonParser.parseString("{a : {a : 2}, b : 2}");
JsonElement o2 = JsonParser.parseString("{b : 2, a : {a : 2}}");
assertEquals(o1, o2);

GSON 2.8.2で動作します。
トムサリーバ2018年

1
jsonArray要素が正しくない場合は機能しません。バージョン2.8.2
Naveen Kumar RB

1
オブジェクト/要素の順序が異なると機能しない
Jknair

2つのjsonプロパティの順序が同じである単体テストでそれが欲しかったので、私にとってはうまくいきました
GabrielBB

@GabrielBB質問を編集して、APIが廃止されたバージョンと、新しいバージョンのコードが機能し始めるバージョンを示します。
クリアライト

30

私は次のようにします

JSONObject obj1 = /*json*/;
JSONObject obj2 = /*json*/;

ObjectMapper mapper = new ObjectMapper();

JsonNode tree1 = mapper.readTree(obj1.toString());
JsonNode tree2 = mapper.readTree(obj2.toString());

return tree1.equals(tree2);

すでにジャクソンを使用している場合、これが最良の答えです。
クリストフディーツェ2016年

18
しかし、これは私が思う厳密な比較です。要素の順序が異なる2つの等しいjsonの場合はfalseを返します。
デッドプール

@deadpoolの原則は健全です。比較をより複雑にするために変更する必要があるだけです(たとえば、ツリーの単純なイコールではなく、キーフィールドをチェックします)。
2017

これがこれまでで最高の答えです。これは、私の質問に答えるだけでなく、実行する必要があるほとんどすべてのオブジェクト比較にも答えます。ありがとう、joshu。
LuizFeijãoVeronesi 2017

2
@deadpool、それは厳密な比較だったかもしれませんが、現在は厳密ではありません。
Andrei Damian-Fekete 2018年

18

json-libのJSONAssertクラスを使用してみてください。

JSONAssert.assertEquals(
  "{foo: 'bar', baz: 'qux'}",
  JSONObject.fromObject("{foo: 'bar', baz: 'xyzzy'}")
);

与える:

junit.framework.ComparisonFailure: objects differed at key [baz]; expected:<[qux]> but was:<[xyzzy]>

またはさらに単純:JSONAssert.assertJsonEquals( "{foo: 'bar'、baz: 'qux'}"、{foo: 'bar'、baz: 'xyzzy'} ");
Rob Juurlink

2
このソリューションはJSON内のデータ項目の順序で機能しますが、配列内の要素の順序が一致しない場合は失敗します。たとえば、コードがJSONに変換されるセットを使用する場合。次のJSON比較は失敗JSONAssert.assertJsonEquals( "{foo: 'bar', list: [{test: '1'}, {rest: '2'}] }", "{ foo: 'bar', list: [{rest: '2'}, {test: '1'}] }"); します:メッセージ:junit.framework.AssertionFailedError: : : objects differed at key [list];: arrays first differed at element [0];: objects differed at key [test];
Dan Temple

はい、これはJsonの制限です:(。json.orgは、順序付けされていないコレクショントークンがないことを示しています。{}はキーと値のペアのみを囲むことができます。これは非常に不快です
Merk

15

このライブラリを使用:https : //github.com/lukas-krecan/JsonUnit

ポン:

<dependency>
    <groupId>net.javacrumbs.json-unit</groupId>
    <artifactId>json-unit</artifactId>
    <version>1.5.0</version>
    <scope>test</scope>
</dependency>

IGNORING_ARRAY_ORDER-配列の順序を無視します

assertJsonEquals("{\"test\":[1,2,3]}",
  "{\"test\":  [3,2,1]}",
  when(IGNORING_ARRAY_ORDER)
);

コメントを追加して、使用方法をpomに追加できますが、使用方法を理解するにはドキュメントが必要です
Ran Adler

使い方は非常に簡単です。これをpomに追加します。<dependency> <groupId> net.javacrumbs.json-unit </ groupId> <artifactId> json-unit </ artifactId> <version> 1.5.0 </ version> <scope> test </ scope> </ dependency>
chethu 14年

10x私はリンクの指示を見て、それを見つけました:)
Ran Adler

12

すでにJUnitを使用している場合、最新バージョンではHamcrestが採用されています。これは、新しいマッチャーを構築するために拡張できる汎用マッチングフレームワーク(特にユニットテストに役立ちます)です。

hamcrest-jsonJSON対応の一致で呼び出される小さなオープンソースライブラリがあります。十分に文書化され、テストされ、サポートされています。以下はいくつかの便利なリンクです:

JSONライブラリのオブジェクトを使用したコードの例org.json.simple

Assert.assertThat(
    jsonObject1.toJSONString(),
    SameJSONAs.sameJSONAs(jsonObject2.toJSONString()));

オプションで、(1)「任意の順序」の配列を許可し、(2)余分なフィールドを無視することができます。

Java用のJSONライブラリ(の様々ながあるのでJacksonGSONjson-lib、など)、それが有用であることhamcrest-jsonをサポートするJSONテキスト(などjava.lang.String)、ダグラス・クロックフォードのJSONライブラリからだけでなく、ネイティブにサポートするオブジェクトorg.json

最後に、JUnitを使用していない場合は、アサーションに直接Hamcrestを使用できます。(私はそれについてここに書いた。


JSONAssertを直接使用する代わりにhamcrastマッチャーを使用する利点は何ですか?
ヨハネス

2
@ヨハネス:スタイルのみ。
kevinarpe 2015年

hamcrest-jsonのソースの最終コミット日は2012年です。現在、あまりサポートされていない可能性があります。
するThorbjörnRavnアンデルセン

11

JsonUnitを試すことができます。2つのJSONオブジェクトを比較し、違いを報告できます。ジャクソンの上に構築されています。

例えば

assertJsonEquals("{\"test\":1}", "{\n\"test\": 2\n}");

結果

java.lang.AssertionError: JSON documents are different:
Different value found in node "test". Expected 1, got 2.

6

両方のオブジェクトをHashMapに読み込んでから、通常のassertEquals()と比較することで、うまくいきました。ハッシュマップのequals()メソッドを呼び出し、内部のすべてのオブジェクトを再帰的に比較します(他のハッシュマップか、文字列や整数などの単一の値のオブジェクトのいずれかになります)。これは、CodehausのJackson JSONパーサーを使用して行われました。

assertEquals(mapper.readValue(expectedJson, new TypeReference<HashMap<String, Object>>(){}), mapper.readValue(actualJson, new TypeReference<HashMap<String, Object>>(){}));

JSONオブジェクトが配列の場合も、同様のアプローチを使用できます。


6

私はこれを使用しており、(org.json。*を使用して)正常に動作します。

package com.project1.helpers;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class JSONUtils {

    public static boolean areEqual(Object ob1, Object ob2) throws JSONException {
        Object obj1Converted = convertJsonElement(ob1);
        Object obj2Converted = convertJsonElement(ob2);
        return obj1Converted.equals(obj2Converted);
    }

    private static Object convertJsonElement(Object elem) throws JSONException {
        if (elem instanceof JSONObject) {
            JSONObject obj = (JSONObject) elem;
            Iterator<String> keys = obj.keys();
            Map<String, Object> jsonMap = new HashMap<>();
            while (keys.hasNext()) {
                String key = keys.next();
                jsonMap.put(key, convertJsonElement(obj.get(key)));
            }
            return jsonMap;
        } else if (elem instanceof JSONArray) {
            JSONArray arr = (JSONArray) elem;
            Set<Object> jsonSet = new HashSet<>();
            for (int i = 0; i < arr.length(); i++) {
                jsonSet.add(convertJsonElement(arr.get(i)));
            }
            return jsonSet;
        } else {
            return elem;
        }
    }
}

4

org.jsonについては、JSONObjectインスタンスと比較する独自のソリューションを公開しました。そのプロジェクトでは複雑なJSONオブジェクトを操作しなかったため、これがすべてのシナリオで機能するかどうかはわかりません。また、これを単体テストで使用しているので、最適化には力を入れませんでした。ここにあります:

public static boolean jsonObjsAreEqual (JSONObject js1, JSONObject js2) throws JSONException {
    if (js1 == null || js2 == null) {
        return (js1 == js2);
    }

    List<String> l1 =  Arrays.asList(JSONObject.getNames(js1));
    Collections.sort(l1);
    List<String> l2 =  Arrays.asList(JSONObject.getNames(js2));
    Collections.sort(l2);
    if (!l1.equals(l2)) {
        return false;
    }
    for (String key : l1) {
        Object val1 = js1.get(key);
        Object val2 = js2.get(key);
        if (val1 instanceof JSONObject) {
            if (!(val2 instanceof JSONObject)) {
                return false;
            }
            if (!jsonObjsAreEqual((JSONObject)val1, (JSONObject)val2)) {
                return false;
            }
        }

        if (val1 == null) {
            if (val2 != null) {
                return false;
            }
        }  else if (!val1.equals(val2)) {
            return false;
        }
    }
    return true;
}

1
最適化について説明したので:)、val1nullの場合、このコードからNullPointerExceptionが発生しますif (!val1.equals(val2)) {
JohnDoDo

それは私たちの最高の人にも起こります:)。あなたの答えでそれを修正するための+1。
JohnDoDo 2012

要点:)投票数が多すぎないことを願っています。そうでなければ、多くの支持を得られるでしょう。
Victor Ionescu

1
場合は考慮していないjs2ですnullか、ないときjs1ではありませんnull
シャオ

このコードは、ネストされたオブジェクト/シーケンスでは機能しません。
FabienB 2014年

3

RFC 6902(JSONパッチ)に準拠した差分情報を表示するzjsonpatchライブラリを使用できます。とても使いやすいです。使い方については説明ページをご覧ください


2

ライブラリをhttp://json.org/java/equals取得し、JSONObjectとJSONArrayのメソッドを変更して詳細な等価テストを実行します。子の順序に関係なく動作することを確認するには、内部マップをに置き換えるTreeMapか、などを使用するだけですCollections.sort()


4
それはそれほど素晴らしいことではありません-json比較を行うためのコードが実際に付属しているはずです。
Chii、

しかし、JSONがどのような構造でも何でもできるコードを書くことを想像してみてください...その上で比較を書いてください!これは、すべてのタイプのHTMLページの比較を作成するようなものです。
JPM

2

これを試して:

public static boolean jsonsEqual(Object obj1, Object obj2) throws JSONException

    {
        if (!obj1.getClass().equals(obj2.getClass()))
        {
            return false;
        }

        if (obj1 instanceof JSONObject)
        {
            JSONObject jsonObj1 = (JSONObject) obj1;

            JSONObject jsonObj2 = (JSONObject) obj2;

            String[] names = JSONObject.getNames(jsonObj1);
            String[] names2 = JSONObject.getNames(jsonObj1);
            if (names.length != names2.length)
            {
                return false;
            }

            for (String fieldName:names)
            {
                Object obj1FieldValue = jsonObj1.get(fieldName);

                Object obj2FieldValue = jsonObj2.get(fieldName);

                if (!jsonsEqual(obj1FieldValue, obj2FieldValue))
                {
                    return false;
                }
            }
        }
        else if (obj1 instanceof JSONArray)
        {
            JSONArray obj1Array = (JSONArray) obj1;
            JSONArray obj2Array = (JSONArray) obj2;

            if (obj1Array.length() != obj2Array.length())
            {
                return false;
            }

            for (int i = 0; i < obj1Array.length(); i++)
            {
                boolean matchFound = false;

                for (int j = 0; j < obj2Array.length(); j++)
                {
                    if (jsonsEqual(obj1Array.get(i), obj2Array.get(j)))
                    {
                        matchFound = true;
                        break;
                    }
                }

                if (!matchFound)
                {
                    return false;
                }
            }
        }
        else
        {
            if (!obj1.equals(obj2))
            {
                return false;
            }
        }

        return true;
    }

jsonArrays内では、すべての要素が一致するのではなく、一部の要素が一致する場合にtrueを返します。
matiasg 2014

@matiasg- すべての要素が一致if (obj1Array.length() != obj2Array.length())することを保証しませんか?
kwah 2014

3
@kwah:いいえ。次の例を考えてみましょう:obj1Array = [1,1,1]、obj2Array = [1,2,3]。これはtrueを返します。また、要素が一致する場合でも、それらは同じ順序である必要があります。これは[1,2,3]と[2,3,1]についてもtrueを返しますが、これは誤りです
matiasg


2

空手はまさにあなたが探しているものです。次に例を示します。

* def myJson = { foo: 'world', hey: 'ho', zee: [5], cat: { name: 'Billie' } }
* match myJson = { cat: { name: 'Billie' }, hey: 'ho', foo: 'world', zee: [5] }

(免責事項:ここの開発者)


2

JSONの比較には、JSONCompareの使用をお勧めします:https : //github.com/fslev/json-compare

// Compare by regex
String expected = "{\"a\":\".*me.*\"}";
String actual = "{\"a\":\"some text\"}";
JSONCompare.assertEquals(expected, actual);  // True

// Check expected array has no extra elements
String expected = "[1,\"test\",4,\"!.*\"]";
String actual = "[4,1,\"test\"]";
JSONCompare.assertEquals(expected, actual);  // True

// Check expected array has no numbers
String expected = "[\"\\\\\\d+\"]";
String actual = "[\"text\",\"test\"]";
JSONCompare.assertEquals(expected, actual);  // True

// Check expected array has no numbers
String expected = "[\"\\\\\\d+\"]";
String actual = "[2018]";
JSONCompare.assertNotEquals(expected, actual);  // True

0

私のようなジャクソンでこれをしたい人のために、あなたはjson-unitを使うことができます。

JsonAssert.assertJsonEquals(jsonNode1, jsonNode2);

エラーは、不一致のタイプに関する有用なフィードバックを提供します。

java.lang.AssertionError: JSON documents have different values:
Different value found in node "heading.content[0].tag[0]". Expected 10209, got 10206.

0

他には何も問題なく動作するように思われたので、私はこれを書きました:

private boolean jsonEquals(JsonNode actualJson, JsonNode expectJson) {
    if(actualJson.getNodeType() != expectJson.getNodeType()) return false;

    switch(expectJson.getNodeType()) {
    case NUMBER:
        return actualJson.asDouble() == expectJson.asDouble();
    case STRING:
    case BOOLEAN:
        return actualJson.asText().equals(expectJson.asText());
    case OBJECT:
        if(actualJson.size() != expectJson.size()) return false;

        Iterator<String> fieldIterator = actualJson.fieldNames();
        while(fieldIterator.hasNext()) {
            String fieldName = fieldIterator.next();
            if(!jsonEquals(actualJson.get(fieldName), expectJson.get(fieldName))) {
                return false;
            }
        }
        break;
    case ARRAY:
        if(actualJson.size() != expectJson.size()) return false;
        List<JsonNode> remaining = new ArrayList<>();
        expectJson.forEach(remaining::add);
        // O(N^2)   
        for(int i=0; i < actualJson.size(); ++i) {
            boolean oneEquals = false;
            for(int j=0; j < remaining.size(); ++j) {
                if(jsonEquals(actualJson.get(i), remaining.get(j))) {
                    oneEquals = true;
                    remaining.remove(j);
                    break;
                }
            }
            if(!oneEquals) return false;
        }
        break;
    default:
        throw new IllegalStateException();
    }
    return true;
}

0

次のコードは、2つのJsonObject、JsonArray、JsonPrimitive、およびJasonElementsを比較するのに役立ちます。

private boolean compareJson(JsonElement json1, JsonElement json2) {
        boolean isEqual = true;
        // Check whether both jsonElement are not null
        if (json1 != null && json2 != null) {

            // Check whether both jsonElement are objects
            if (json1.isJsonObject() && json2.isJsonObject()) {
                Set<Entry<String, JsonElement>> ens1 = ((JsonObject) json1).entrySet();
                Set<Entry<String, JsonElement>> ens2 = ((JsonObject) json2).entrySet();
                JsonObject json2obj = (JsonObject) json2;
                if (ens1 != null && ens2 != null) {
                    // (ens2.size() == ens1.size())
                    // Iterate JSON Elements with Key values
                    for (Entry<String, JsonElement> en : ens1) {
                        isEqual = isEqual && compareJson(en.getValue(), json2obj.get(en.getKey()));
                    }
                } else {
                    return false;
                }
            }

            // Check whether both jsonElement are arrays
            else if (json1.isJsonArray() && json2.isJsonArray()) {
                JsonArray jarr1 = json1.getAsJsonArray();
                JsonArray jarr2 = json2.getAsJsonArray();
                if (jarr1.size() != jarr2.size()) {
                    return false;
                } else {
                    int i = 0;
                    // Iterate JSON Array to JSON Elements
                    for (JsonElement je : jarr1) {
                        isEqual = isEqual && compareJson(je, jarr2.get(i));
                        i++;
                    }
                }
            }

            // Check whether both jsonElement are null
            else if (json1.isJsonNull() && json2.isJsonNull()) {
                return true;
            }

            // Check whether both jsonElement are primitives
            else if (json1.isJsonPrimitive() && json2.isJsonPrimitive()) {
                if (json1.equals(json2)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else if (json1 == null && json2 == null) {
            return true;
        } else {
            return false;
        }
        return isEqual;
    }



-5

このソリューションは私にとって、仕事はとても良いです:

try {           
                // Getting The Array "Courses" from json1 & json2   
                Courses1 =json1.getJSONArray(TAG_COURSES1);
                Courses2 = json2.getJSONArray(TAG_COURSES);

                //LOOP FOR JSON1
                for(int i = 0; i < Courses1.length(); i++){
                    //LOOP FOR JSON2
                    for(int ii = 0; ii < Courses2.length(); ii++){
                        JSONObject courses1 = Courses1.getJSONObject(i);
                        JSONObject courses2 = Courses2.getJSONObject(ii);

                        // Storing each json1 item in variable
                        int courseID1 = courses1.getInt(TAG_COURSEID1);
                        Log.e("COURSEID2:", Integer.toString(courseID1));
                        String Rating1 = courses1.getString(TAG_RATING1);
                        int Status1 = courses1.getInt(TAG_STATUS1);
                        Log.e("Status1:", Integer.toString(Status1));      //Put the actual value for Status1 in log.             

                        // Storing each json2 item in variable
                        int courseID2 = courses2.getInt(TAG_COURSEID);
                        Log.e("COURSEID2:", Integer.toString(courseID));   //Put the actual value for CourseID in log
                        String Title2 = courses2.getString(TAG_TITLE);                      
                        String instructor2 = courses2.getString(TAG_INSTRUCTOR);
                        String length2 = courses2.getString(TAG_LENGTH);
                        String rating2 = courses2.getString(TAG_RATING);
                        String subject2 = courses2.getString(TAG_SUBJECT);
                        String description2 = courses2.getString(TAG_DESCRIPTION);

                        //Status1 = 5 from json1; Incomplete, Status1 =-1 Complete 
                        if(Status1 == 5 && courseID2 == courseID1){                                  

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();         
                        //Storing the elements if condition is true.
                        map.put(TAG_COURSEID, Integer.toString(courseID2)); //pend for compare
                        map.put(TAG_TITLE, Title2);
                        map.put(TAG_INSTRUCTOR, instructor2);
                        map.put(TAG_LENGTH, length2);
                        map.put(TAG_RATING, rating2);
                        map.put(TAG_SUBJECT, subject2); //show it
                        map.put(TAG_DESCRIPTION, description2);

                        //adding HashList to ArrayList
                        contactList.add(map);
                        }//if
                    }//for2 (json2)
                } //for1 (json1)                
            }//Try

これが他の人を助けることを願っています。


もちろん、この場合は、値と条件、およびビューの種類を入力するだけです。リストビューのハッシュマップ。
JLouis、2012

1
これは、それを行わない方法の良い例です:)
PetrÚjezdský2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.