0
A
答えて
3
要約:JSONにはプリミティブな順序付けされたマップタイプがないため、いいえです。
最初のステップは、JSON文字列のデコードが行われる限り、クライアントの要件を判断することです。 JSON仕様には順序付きマップタイプがないため、使用する表現を決める必要があります。選択は、クライアントのデコード要件によって異なります。
JSON文字列のデコードを完全に制御できる場合は、継承したイテレータの順番でシリアル化することが保証されているJSONライブラリを使用して、オブジェクトをマップに順番にエンコードするだけです。
これを保証できない場合は、自分で表現してください。 2つの単純な例は以下のとおりです。
交互リスト:
"[key1, value1, key2, value2]"
キー/値のエントリオブジェクトのリスト:
"[{key: key1, val:value1}, {key: key2, val:value2}]"
あなたがこの表現を思いついたら、それは書くのは簡単ですSimpleOrderedMapをループする単純な関数です。たとえば、
JSONArray jarray = new JSONArray(); for(Map.Entry e : simpleOrderedMap) { jarray.put(e.key()); jarray.put(e.value()); }
0
複雑なオブジェクト(JSONにシリアル化されていないため)はマップにフィールドを追加するだけで動作しません。
ここではそのようなコードがあります。
protected static toMap(entry){
def response
if(entry instanceof SolrDocumentList){
def docs = []
response = [numFound:entry.numFound, maxScore:entry.maxScore, start:entry.start, docs:docs]
entry.each {
docs << toMap(it)
}
} else
if(entry instanceof List){
response = []
entry.each {
response << toMap(it)
}
} else
if(entry instanceof Iterable){
response = [:]
entry.each {
if(it instanceof Map.Entry)
response.put(it.key, toMap(it.value))
else
response.put(entry.hashCode(), toMap(it))
}
} else
if (entry instanceof Map){
response = [:]
entry.each {
if(it instanceof Map.Entry)
response.put(it.key, toMap(it.value))
else
response.put(entry.hashCode(), toMap(it))
}
} else {
response = entry
}
return response
}
1
Javaバージョン:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.solr.common.util.NamedList;
public class SolrMapConverter {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Object toMap(Object entry) {
Object response = null;
if (entry instanceof NamedList) {
response = new HashMap<>();
NamedList lst = (NamedList) entry;
for (int i = 0; i < lst.size(); i++) {
((Map) response).put(lst.getName(i), toMap(lst.getVal(i)));
}
} else if (entry instanceof Iterable) {
response = new ArrayList<>();
for (Object e : (Iterable) entry) {
((ArrayList<Object>) response).add(toMap(e));
}
} else if (entry instanceof Map) {
response = new HashMap<>();
for (Entry<String, ?> e : ((Map<String, ?>) entry).entrySet()) {
((Map) response).put(e.getKey(), toMap(e.getValue()));
}
} else {
return entry;
}
return response;
}
}
関連する問題
- 1. jsonの文字列をAndroidのJavaオブジェクトに変換するにはどうすればよいですか?
- 2. JSON文字列をJSオブジェクトに変換するにはどうすればよいですか?
- 3. "変換された"オブジェクト文字列をJSONまたはObjectに変換する
- 4. JSONオブジェクトのコンテンツをJSON文字列にエンコードするにはどうすればよいですか?
- 5. JSONオブジェクトをJSON配列に変換するにはどうすればよいですか?
- 6. 新しいDate()をJSON文字列に変換するにはどうすればよいですか?
- 7. JSONをangle2の文字列に変換するにはどうすればよいですか?
- 8. ハッシュをRuby 1.9のJSON文字列に変換するにはどうすればよいですか?
- 9. JSON文字列をJavaScriptの関数に変換するにはどうすればよいですか?
- 10. 角度4のJSON値を文字列に変換するにはどうすればよいですか?
- 11. Scala List [org.bson.Document]をJSON文字列に変換するにはどうすればよいですか?
- 12. オブジェクトまたは文字列のjsonフィールドはどのように処理すればよいですか?
- 13. JSONオブジェクト内でエスケープされたJSON文字列を変換するにはどうすればよいですか?
- 14. JSONオブジェクトをJSONオブジェクトに変換するにはどうすればいいですか?
- 15. パスカルケースのJSONオブジェクトをラクダのケースJSONオブジェクトに変換するにはどうすればいいですか?
- 16. PythonでJSON文字列をDictionaryに変換するにはどうすればいいですか?
- 17. Jsonオブジェクトリストの文字列をJSONオブジェクトのリストに変換する
- 18. json文字列をjsonオブジェクトに変換する
- 19. JSON文字列をJSONオブジェクトに変換する
- 20. どのようにアンドロイドでJSONオブジェクトの文字列を変換する
- 21. json文字列cantがjsonオブジェクトに変換されない
- 22. ネストされたJSON文字列をJSONに変換する
- 23. JSON文字列をjavascriptオブジェクトに変換するには?
- 24. JSONオブジェクトに文字列レスポンスを変換するには?
- 25. HTTP文字列のJSONオブジェクトに変換するJava文字列
- 26. JSON文字列をjqueryでjavascriptオブジェクトに変換しますか?
- 27. 有効なJSONまたは無効なJSONを文字列に変換するにはどうすればよいですか?
- 28. オブジェクトをJSONオブジェクトから文字列に変換する
- 29. JavaScriptを使用してJSON文字列をJSONオブジェクトに変換するにはどうすればよいですか?
- 30. この文字列をJSONに変換するにはどうすればよいですか? (JavaScriptオブジェクトを使用して)(string-> JSON-> XML)