どうやってJavaでハッシュマップをJSONオブジェクトに変換したり、JSONオブジェクトをJSON文字列に変換するのですか?
あなたが使用することができます:
new JSONObject(map);
注意: これはMap<String, String>!
に対してのみ機能します。
あなたがそのドキュメントから得ることができる他の機能
http://stleary.github.io/JSON-Java/index.html
Gson は任意の複雑なオブジェクトを直列化するのにも使うことができます。
使い方は次のとおりです。
Gson gson = new Gson();
String json = gson.toJson(myObject);
Gson
は自動的にコレクションをJSON
配列に変換します。 Gsonはプライベートフィールドをシリアル化でき、一時フィールドを自動的に無視します。
Jsonを使った例
Map<String, Object> data = new HashMap<String, Object>();
data.put( "name", "Mars" );
data.put( "age", 32 );
data.put( "city", "NY" );
JSONObject json = new JSONObject();
json.putAll( data );
System.out.printf( "JSON: %s", json.toString(2) );
出力::
JSON: {
"age": 32,
"name": "Mars",
"city": "NY"
}
また、GoogleのGSONを使用してみることもできます。GoogleのGSONは、JavaオブジェクトをそれらのJSON表現に変換するために利用できる最良のライブラリです。
次のようにMap
を使用して、JSON
をJackson
に変換できます。
Map<String,Object> map = new HashMap<>();
//You can convert any Object.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);
map.put("key3","string1");
map.put("key4","string2");
String json = new ObjectMapper().writeValueAsString(map);
System.out.println(json);
Jackson
に対するMavenの依存関係:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
<scope>compile</scope>
</dependency>
JSONObject
ライブラリを使用している場合は、次のようにしてmapをJSON
に変換できます。
Map<String, Object> map = new HashMap<>();
// Convert a map having list of values.
String[] value1 = new String[] { "value11", "value12", "value13" };
String[] value2 = new String[] { "value21", "value22", "value23" };
map.put("key1", value1);
map.put("key2", value2);
JSONObject json = new JSONObject(map);
System.out.println(json);
JSONObject
に対するMavenの依存関係:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
これが役立つことを願っています。ハッピーコーディング.
マップを列挙してキーと値のペアをJSONObjectに追加するだけです。
方法 :
private JSONObject getJsonFromMap(Map<String, Object> map) throws JSONException {
JSONObject jsonData = new JSONObject();
for (String key : map.keySet()) {
Object value = map.get(key);
if (value instanceof Map<?, ?>) {
value = getJsonFromMap((Map<String, Object>) value);
}
jsonData.put(key, value);
}
return jsonData;
}
パーティーに遅刻しますが、ここに私の _ gson _ ハッシュマップをシリアライズするためのアドホックライターがいます。私はJSON文字列属性としてキーと値のペアのマップを書かなければなりませんでした、1つが整数型であることを期待します。この単純なユースケース用にカスタムJavaBeanラッパーを作成したくありませんでした。
GSON JsonWriterクラスは、厳密に型指定されたwriter.value()関数をほとんど含まない、使いやすいシリアライザクラスです。
// write Map as JSON document to http servlet response
Map<String,String> sd = DAO.getSD(123);
res.setContentType("application/json; charset=UTF-8");
res.setCharacterEncoding("UTF-8");
JsonWriter writer = new JsonWriter(new OutputStreamWriter(res.getOutputStream(), "UTF-8"));
writer.beginObject();
for(String key : sd.keySet()) {
String val = sd.get(key);
writer.name(key);
if (key.equals("UniqueID") && val!=null)
writer.value(Long.parseLong(val));
else
writer.value(val);
}
writer.endObject();
writer.close();
どのカスタム型も必要でなければ、単にtoJson()関数を使用することができます。 gson-2.2.4.jarライブラリは、残酷な依存関係なく、わずか190KB未満です。大きなフレームワークを統合することなく、カスタムサーブレットアプリケーションまたはスタンドアロンアプリケーションで簡単に使用できます。
Gson gson = new Gson();
String json = gson.toJson(myMap);
これは通常Jsonライブラリの作業です。自分でやろうとしないでください。すべてのjsonライブラリはあなたが要求しているものを実装するべきです、そしてあなたはページの一番下の json.org であなたはJava Jsonライブラリのリストを見つけることができます。
私はそれを処理するための別の方法を見つけました。
Map obj=new HashMap();
obj.put("name","sonoo");
obj.put("age",new Integer(27));
obj.put("salary",new Double(600000));
String jsonText = JSONValue.toJSONString(obj);
System.out.print(jsonText);
お役に立てれば。
ありがとう。
私の場合、依存関係は必要ありませんでした。 Java 8を使用すると、JSONをこの単純な文字列として取得できます。
Map<String, Object> map = new HashMap<>();
map.put("key", "value");
map.put("key2", "value2");
String json = "{"+map.entrySet().stream()
.map(e -> "\""+ e.getKey() + "\"" + ":\"" + String.valueOf(e.getValue()) + "\"")
.collect(Collectors.joining(", "))+"}";
org.json.simple.JSONObject
を使っている人は、マップをJson Stringに変換し、それを解析してJSONObject
を取得できます。
JSONObject object = (JSONObject) new JSONParser().parse(JSONObject.toJSONString(map));
nderscore-Java ライブラリは、ハッシュマップまたは配列リストをJSONに、またはその逆に変換できます。
import com.github.underscore.lodash.U;
import Java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("1", "a");
map.put("2", "b");
System.out.println(U.toJson(map));
// {
// "1": "a",
// "2": "b"
// }
}
}
ここに私のGSONとの1本線ソリューション:
myObject = new Gson().fromJson(new Gson().toJson(myHashMap), MyClass.class);
もしあなたがnet.sf.json.JSONObject
を使っているのであれば、その中にJSONObject(map)
コンストラクタは見つかりません。 public static JSONObject fromObject( Object object )
メソッドを使う必要があります。このメソッドはJSON形式の文字列、Maps、DynaBeans、およびJavaBeansを受け入れます。
JSONObject jsonObject = JSONObject.fromObject(myMap);
XStreamを使うことができます - それは本当に便利です。例を参照してください ここ
package com.thoughtworks.xstream.json.test;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
public class WriteTest {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<String,String>();
map.add("1", "a");
map.add("2", "b");
XStream xstream = new XStream(new JettisonMappedXmlDriver());
System.out.println(xstream.toXML(map));
}
}
あなたがコードでそれを使う必要があるなら。
Gson gsone = new Gson();
JsonObject res = gsone.toJsonTree(sqlParams).getAsJsonObject();
GsonやJSONの解析ライブラリは不要です。 new JSONObject(Map<String, JSONObject>).toString()
を使用する、例:
/**
* convert target map to JSON string
*
* @param map the target map
* @return JSON string of the map
*/
@NonNull public String toJson(@NonNull Map<String, Target> map) {
final Map<String, JSONObject> flatMap = new HashMap<>();
for (String key : map.keySet()) {
try {
flatMap.put(key, toJsonObject(map.get(key)));
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
// 2 indentSpaces for pretty printing
return new JSONObject(flatMap).toString(2);
} catch (JSONException e) {
e.printStackTrace();
return "{}";
}
}
import org.json.JSONObject;
HashMap<Object, Object> map = new HashMap<>();
String[] list={"Grader","Participant"};
String[] list1={"Assistant","intern"};
map.put("TeachingAssistant",list);
map.put("Writer",list1);
JSONObject jsonObject = new JSONObject(map);
System.out.printf(jsonObject.toString());
// Result: {"TeachingAssistant":["Grader","Participant"],"Writer":["Assistant","intern"]}
これは私のために働く:
import groovy.json.JsonBuilder
properties = new Properties()
properties.put("name", "zhangsan")
println new JsonBuilder(properties).toPrettyString()
あなたがHashMapを本当に必要としないのなら、あなたはそのようなことをすることができます:
String jsonString = new JSONObject() {{
put("firstName", user.firstName);
put("lastName", user.lastName);
}}.toString();
出力:
{
"firstName": "John",
"lastName": "Doe"
}
私はAlibaba fastjsonを使っています。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>VERSION_CODE</version>
</dependency>
そしてインポート:
import com.alibaba.fastjson.JSON;
その後:
String text = JSON.toJSONString(obj); // serialize
VO vo = JSON.parseObject("{...}", VO.class); //unserialize
全て大丈夫。
Gson を使用できます。このライブラリは、JavaオブジェクトをJSONオブジェクトに、またはその逆に変換するための簡単なメソッドを提供します。
例:
GsonBuilder gb = new GsonBuilder();
Gson gson = gb.serializeNulls().create();
gson.toJson(object);
デフォルト以外の設定オプションを設定する必要がある場合は、GsonBuilderを使用できます。上記の例では、変換プロセスはobjectからのnull属性もシリアル化します。
ただし、この方法は非ジェネリック型に対してのみ機能します。ジェネリック型の場合はtoJson(object、Type)を使う必要があります。
Gsonについてのより多くの情報 ここ 。
オブジェクトは Serializable インターフェースを実装する必要があることを忘れないでください。
複雑なオブジェクトを使用する場合は、 https://stackoverflow.com/a/24635655/2914140 および https://stackoverflow.com/に記載されているように、 enableComplexMapKeySerialization() を適用する必要があります。/26374888/2914140 。
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
Map<Point, String> original = new LinkedHashMap<Point, String>();
original.put(new Point(5, 6), "a");
original.put(new Point(8, 8), "b");
System.out.println(gson.toJson(original));
出力は以下のようになります。
{
"(5,6)": "a",
"(8,8)": "b"
}
決して遅刻しないでください。シリアル化されたリストが欲しい場合に備えて、私は _ gson _ を使用してHashMapのリストを文字列に変換しました。
List<HashMap<String, String>> list = new ArrayList<>();
HashMap<String,String> hashMap = new HashMap<>();
hashMap.add("key", "value");
hashMap.add("key", "value");
hashMap.add("key", "value");
list.add(hashMap);
String json = new Gson().toJson(list);
このjson
は[{"key":"value","key":"value","key":"value"}]
を生成します
Seleniumでカスタムコマンドからのレスポンスをデシリアライズするとき、私は同様の問題に直面しました。応答はjsonでしたが、Seleniumは内部的にそれをJava.util.HashMapに変換します[String、Object]
Scalaに精通していて、JSON用のplay-APIを使用している場合は、これが役に立ちます。
import play.api.libs.json.{JsValue, Json}
import scala.collection.JavaConversions.mapAsScalaMap
object JsonParser {
def parse(map: Map[String, Any]): JsValue = {
val values = for((key, value) <- map) yield {
value match {
case m: Java.util.Map[String, _] @unchecked => Json.obj(key -> parse(m.toMap))
case m: Map[String, _] @unchecked => Json.obj(key -> parse(m))
case int: Int => Json.obj(key -> int)
case str: String => Json.obj(key -> str)
case bool: Boolean => Json.obj(key -> bool)
}
}
values.foldLeft(Json.obj())((temp, obj) => {
temp.deepMerge(obj)
})
}
}
小さなコードの説明:
基本型(String、Integer、Boolean)が見つかるまで、コードはHashMapを再帰的に通過します。これらの基本型は、JsObjectに直接ラップすることができます。再帰が展開されると、ディープマージは作成されたオブジェクトを連結します。
'@unchecked'は型消去警告を処理します。
このソリューションは複雑なJSONと連携します。
public Object toJSON(Object object) throws JSONException {
if (object instanceof HashMap) {
JSONObject json = new JSONObject();
HashMap map = (HashMap) object;
for (Object key : map.keySet()) {
json.put(key.toString(), toJSON(map.get(key)));
}
return json;
} else if (object instanceof Iterable) {
JSONArray json = new JSONArray();
for (Object value : ((Iterable) object)) {
json.put(toJSON(value));
}
return json;
}
else {
return object;
}
}