私の問題は、PHPは配列が連続していて、ゼロインデックスで始まるかどうかに基づいて、配列を異なる方法でエンコードすることです。例:
$arr = array(array(12), array(13));
===> [[12], [13]]
$arr = array("0" => array(12), "1" => array(13));
===> [[12], [13]]
$arr = array("0" => array(12), "2" => array(13));
===> {"0": [12], "2": [13]}
なぜ3番目のものはそれほど根本的に異なるのですか?
最初の例はリストのリストを生成し、3番目の例はリストを含むオブジェクトを生成します。これらすべてをJavaに変換する必要がありますMap<Integer, List<Double>>
。これは、これらのPHPオブジェクトについてJavaで見つけることができる最も一般的なデータ型です。GoogleのGsonを使用しています。ただし、例ではさまざまなタイプのオブジェクトが生成されるため、これをマップに読み込むことはできません。最初にインデックスがあるかどうかを確認してから、カスタムマップに1つずつ追加する必要があります。「この部分を行うには、より良い方法である必要があります」という行を見てください。これは私のコードです:
import java.lang.StringBuilder;
import com.google.gson.*;
import com.google.gson.reflect.*;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
public class Saving {
public static void main(String[] args) {
String json = "[[12], [13]]";
json = json.trim();
Map<Integer, List<Double>> fuelSavings = null;
// such a cluster****
if(json.startsWith("[[")) { // THERE HAS TO BE A BETTER WAY TO DO THIS PART
// ANY WAY I CAN AVOID THIS ENTIRE IF CONDITION
//implicit keys
fuelSavings = new HashMap<Integer, List<Double>>();
List<List<Double>> temporaryList = new Gson().fromJson(json, new TypeToken<List<List<Double>>>(){}.getType());
int index = 0;
for(List<Double> temporaryListMember: temporaryList) {
fuelSavings.put(index, temporaryListMember);
index++;
}
} else {
// explicit keys
// THIS PART IS PERFECT
fuelSavings = new Gson().fromJson(json, new TypeToken<Map<Integer, List<Double>>>(){}.getType());
}
System.out.println(fuelSavings);
}
}
どんな助けでもありがたいです、ありがとう!