উত্তর:
তুমি ব্যবহার করতে পার:
new JSONObject(map);
সাবধানতা: এটি কেবল একটির জন্য কাজ করবেMap<String, String>!
অন্যান্য ফাংশনগুলি আপনি এর ডকুমেন্টেশন থেকে পেতে পারেন
http://stleary.github.io/JSON-java/index.html
Map
মধ্যে JSONObject
কিন্তু কিভাবে আপনি JSONObject কে অবশ্যই থেকে এই মানচিত্রটি পেতে পারেন?
গসনকে যথেচ্ছ জটিল বস্তুগুলিকে সিরিয়ালাইজ করতেও ব্যবহার করা যেতে পারে।
আপনি এটি কীভাবে ব্যবহার করবেন তা এখানে:
Gson gson = new Gson();
String json = gson.toJson(myObject);
Gson
সংগ্রহগুলিকে স্বয়ংক্রিয়ভাবে JSON
অ্যারেতে রূপান্তরিত করবে । গসন ব্যক্তিগত ক্ষেত্রগুলি সিরিয়ালাইজ করতে পারে এবং স্বয়ংক্রিয়ভাবে ক্ষণস্থায়ী ক্ষেত্রগুলি উপেক্ষা করে।
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"
}
আপনি গুগলের জিএসওএন ব্যবহার করার চেষ্টা করতে পারেন। গুগলের জিএসওএন জাভা অবজেক্টগুলিকে তাদের জেএসএন উপস্থাপনায় রূপান্তর করার জন্য উপলব্ধ সেরা গ্রন্থাগার।
2
মধ্যে DO json.toString(
2`)
আপনি নিম্নলিখিত হিসাবে ব্যবহার করে রূপান্তর 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
:
<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
গ্রন্থাগার ব্যবহার করে থাকেন তবে আপনি মানচিত্রটিকে 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
:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
আশা করি এটি সাহায্য করবে। শুভ কোডিং।
আমার ক্ষেত্রে আমি কোনও নির্ভরতা চাইনি। জাভা 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(", "))+"}";
"
এই বিরতি
আপনি কেবল মানচিত্রটি গণনা করতে এবং কী-মান জোড়াটি 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;
}
ইন্ডসকোর-জাভা লাইব্রেরি হ্যাশ ম্যাপ বা অ্যারে তালিকাটিকে জসন এবং ভাইস শ্লোকে রূপান্তর করতে পারে।
import com.github.underscore.lodash.U;
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("1", "a");
map.put("2", "b");
System.out.println(U.toJson(map));
// {
// "1": "a",
// "2": "b"
// }
}
}
পার্টিতে দেরীতে তবে হ্যাশম্যাপ সিরিয়ালাইজ করার জন্য আমার জিএসএন অ্যাডহক লেখক। আমাকে জেসন স্ট্রিং বৈশিষ্ট্য হিসাবে কী-মান জোড়ার মানচিত্র লিখতে হয়েছিল, একটি নির্দিষ্ট সংখ্যার পূর্ণসংখ্যার প্রত্যাশা করতে হবে। আমি এই সাধারণ ইউজকেসটির জন্য কাস্টম জাভাবিয়ান র্যাপার তৈরি করতে চাইনি।
GSON JsonWriter ক্লাসে কয়েকটি দৃ strongly়ভাবে টাইপ করা লেখক.মূল্য () ফাংশন সমন্বিত সিরিয়ালাইজ ক্লাস ব্যবহার করা সহজ।
// 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();
যদি কাস্টম ধরণের কোনওটির প্রয়োজন না হয় তবে আমি কেবলমাত্র জেসন () ফাংশনটি ব্যবহার করতে পারি। gson-2.2.4.jar লাইব্রেরিটি নিষ্ঠুর নির্ভরতা ছাড়াই মাত্র 190KB এর অধীনে। বড় কাঠামোর সংহত না করে যে কোনও কাস্টম সার্লেট অ্যাপ্লিকেশন বা স্বতন্ত্র অ্যাপ্লিকেশনটিতে ব্যবহার করা সহজ।
Gson gson = new Gson();
String json = gson.toJson(myMap);
আগের চেয়ে বেশি দেরি করা ভাল। আপনি যদি সিরিয়ালযুক্ত তালিকা পেতে চান তবে আমি হাশম্যাপের তালিকাটিকে স্ট্রিংয়ে রূপান্তর করতে আমি জিএসএন ব্যবহার করেছি ।
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"}]
Gson
।
এই সমাধানটি জটিল জেএসওএনগুলির সাথে কাজ করে:
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;
}
}
আমরা গসন ব্যবহার করি
Gson gson = new Gson();
Type gsonType = new TypeToken<HashMap>(){}.getType();
String gsonString = gson.toJson(elements,gsonType);
আপনি এক্সস্ট্রিম ব্যবহার করতে পারেন - এটি সত্যই সহজ। উদাহরণ এখানে দেখুন
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));
}
}
আপনি যদি ব্যবহার করছেন net.sf.json.JSONObject
তবে আপনি এতে কোনও JSONObject(map)
নির্মাণকারী পাবেন না । আপনাকে public static JSONObject fromObject( Object object )
পদ্ধতিটি ব্যবহার করতে হবে । এই পদ্ধতিটি JSON ফর্ম্যাটযুক্ত স্ট্রিংস, মানচিত্র, ডায়ানাবিয়ানস এবং জাভাবিয়ান গ্রহণ করে।
JSONObject jsonObject = JSONObject.fromObject(myMap);
আপনি যদি জটিল অবজেক্টগুলি ব্যবহার করেন তবে আপনার https://stackoverflow.com/a/24635655/2914140 এবং https://stackoverflow.com/a/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"
}
গসন বা জেএসএন পার্সিং গ্রন্থাগারগুলির প্রয়োজন নেই।
কেবল ব্যবহার করে 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"]}
আপনার যদি সত্যিই হ্যাশম্যাপের প্রয়োজন না হয় তবে আপনি এরকম কিছু করতে পারেন:
String jsonString = new JSONObject() {{
put("firstName", user.firstName);
put("lastName", user.lastName);
}}.toString();
আউটপুট:
{
"firstName": "John",
"lastName": "Doe"
}
HashMap
একটি JSON অবজেক্ট তৈরি করার জন্য একটি উপায় জিজ্ঞাসা করে , এবং এটি এর উত্তর দেয় না।
আমি সহজ এবং সহজ আলিবাবা ফাস্টজসন ব্যবহার করছি:
<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
সবকিছু ঠিক আছে.
আপনি গসন ব্যবহার করতে পারেন । এই লাইব্রেরিটি জাভা অবজেক্টগুলিকে JSON অবজেক্ট এবং তদ্বিপরীত রূপান্তর করার জন্য সহজ পদ্ধতি সরবরাহ করে।
উদাহরণ:
GsonBuilder gb = new GsonBuilder();
Gson gson = gb.serializeNulls().create();
gson.toJson(object);
যখন আপনি ডিফল্ট ব্যতীত অন্য কোনও কনফিগারেশন বিকল্প সেট করতে হয় আপনি একটি গসনবিল্ডার ব্যবহার করতে পারেন। উপরের উদাহরণে রূপান্তর প্রক্রিয়াটি অবজেক্ট থেকে নাল বৈশিষ্ট্যগুলিও সিরিয়ালাইজ করবে।
যাইহোক, এই পদ্ধতিরটি কেবল অ-জেনেরিক প্রকারের জন্য কাজ করে। জেনেরিক প্রকারের জন্য আপনাকে জসন (অবজেক্ট, টাইপ) ব্যবহার করতে হবে।
গসন সম্পর্কে আরও তথ্য এখানে ।
মনে রাখবেন যে অবজেক্টটি অবশ্যই সিরিয়ালাইজেবল ইন্টারফেসটি প্রয়োগ করবে ।
এটি আমার পক্ষে কাজ করে:
import groovy.json.JsonBuilder
properties = new Properties()
properties.put("name", "zhangsan")
println new JsonBuilder(properties).toPrettyString()
TypeToken.getParameterized পদ্ধতি ব্যবহার করে আরও জটিল জটিল মানচিত্র এবং তালিকাগুলির জন্য জিএসন উপায়:
আমাদের কাছে এমন একটি মানচিত্র রয়েছে যা দেখে মনে হচ্ছে:
Map<Long, List<NewFile>> map;
উপরের উল্লিখিত getParameterized পদ্ধতিটি ব্যবহার করে আমরা টাইপটি পাই :
Type listOfNewFiles = TypeToken.getParameterized(ArrayList.class, NewFile.class).getType();
Type mapOfList = TypeToken.getParameterized(LinkedHashMap.class, Long.class, listOfNewFiles).getType();
এবং তারপরে জসন পদ্ধতিটি থেকে জসন পদ্ধতিটি এই জাতীয় মানচিত্রঅফলিট অবজেক্টটি ব্যবহার করে ব্যবহার করুন :
Map<Long, List<NewFile>> map = new Gson().fromJson(fileContent, mapOfList);
উল্লিখিত অবজেক্ট নিউফাইলে দেখে মনে হচ্ছে:
class NewFile
{
private long id;
private String fileName;
public void setId(final long id)
{
this.id = id;
}
public void setFileName(final String fileName)
{
this.fileName = fileName;
}
}
Deserialized JSON এর মতো দেখাচ্ছে:
{
"1": [
{
"id": 12232,
"fileName": "test.html"
},
{
"id": 12233,
"fileName": "file.txt"
},
{
"id": 12234,
"fileName": "obj.json"
}
],
"2": [
{
"id": 122321,
"fileName": "test2.html"
},
{
"id": 122332,
"fileName": "file2.txt"
},
{
"id": 122343,
"fileName": "obj2.json"
}
]
}
সেলেনিয়ামে কাস্টম কমান্ডগুলি থেকে প্রতিক্রিয়াটি deserial করার সময় আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি। প্রতিক্রিয়াটি জাসন ছিল, তবে সেলেনিয়াম অভ্যন্তরীণভাবে এটি জাভা.ইটিল.হ্যাশম্যাপে অনুবাদ করেছে [স্ট্রিং, অবজেক্ট]
আপনি যদি স্কেলার সাথে পরিচিত হন এবং জেএসএনের জন্য প্লে-এপিআই ব্যবহার করেন তবে আপনি এতে উপকৃত হতে পারেন:
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)
})
}
}
ছোট কোডের বিবরণ:
কোডটি হ্যাশম্যাপের মাধ্যমে পুনরাবৃত্তভাবে অনুসরণ করে যতক্ষণ না প্রাথমিক ধরণের (স্ট্রিং, পূর্ণসংখ্যা, বুলিয়ান) সন্ধান পাওয়া যায়। এই মৌলিক প্রকারগুলি সরাসরি একটি জেসোবজেক্টে আবৃত হতে পারে। যখন পুনরাবৃত্তিটি উদ্ঘাটন করা হয়, তখন গভীর নিমজ্জন তৈরি হওয়া বস্তুগুলিকে সম্মতি দেয়।
'@ অচিরাচরিত' মুছে ফেলা সতর্কতার ধরণগুলির যত্ন নেয়।
প্রথমে আপনার সমস্ত বস্তুকে বৈধ স্ট্রিংগুলিতে রূপান্তর করুন
HashMap<String, String> params = new HashMap<>();
params.put("arg1", "<b>some text</b>");
params.put("arg2", someObject.toString());
তারপরে একটি org.json.JSONObject এ পুরো মানচিত্রটি .োকান
JSONObject postData = new JSONObject(params);
এখন আপনি কেবলমাত্র অবজেক্টের টাসস্ট্রিং কল করে জেএসএন পেতে পারেন
postData.toString()
//{"arg1":"<b>some text<\/b>" "arg2":"object output"}
একটি নতুন JSONObject তৈরি করুন
JSONObject o = new JSONObject(postData.toString());
অথবা এইচটিটিপি প্রেরণের জন্য বাইট অ্যারে হিসাবে
postData.toString().getBytes("UTF-8");