উত্তর:
GSON এটি একটি দুর্দান্ত উপায়ে করতে পারে:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)");
GsonBuilder
, যেহেতু আমি ব্যবহার gson.toJson(object)
করছিলাম তখন থেকে আমার ইনস্ট্যান্টেশনটি কেবলমাত্র থেকে বদলাতে Gson gson = new Gson();
হয়েছিল Gson gson = new GsonBuilder().setPrettyPrinting().create();
এবং আমার কোডটি কাজ করতে থাকে তবে একক লাইনের পরিবর্তে অবজেক্টটি বেশ মুদ্রিত করে।
আমি ডেটা সুন্দরভাবে মুদ্রণের জন্য org.json অন্তর্নির্মিত পদ্ধতি ব্যবহার করেছি ।
JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation
JSON- এ ক্ষেত্রগুলির ক্রম সংজ্ঞা অনুসারে এলোমেলো। একটি নির্দিষ্ট আদেশ পার্সার বাস্তবায়নের সাপেক্ষে।
দেখে মনে হচ্ছে জিএসএন এটি সমর্থন করে, যদিও আপনি জানেন না যে আপনি যে লাইব্রেরিটি ব্যবহার করছেন সেটি থেকে আপনি স্যুইচ করতে চান কিনা।
ব্যবহারকারী গাইড থেকে:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);
জ্যাকসনের সাথে ( com.fasterxml.jackson.databind
):
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject))
থেকে: কীভাবে সুন্দর মুদ্রণ জেএসএন আউটপুট সক্ষম করবেন (জ্যাকসন)
আমি জানি এটি ইতিমধ্যে উত্তরগুলিতে রয়েছে তবে আমি এটি আলাদাভাবে এখানে লিখতে চাই কারণ সম্ভাবনা হ'ল, আপনার কাছে ইতিমধ্যে জ্যাকসন নির্ভরতা হিসাবে রয়েছেন এবং তাই আপনার প্রয়োজন সমস্ত কোডের একটি অতিরিক্ত লাইন হবে
আপনি যদি JSON প্রসেসিং (JSR-353) বাস্তবায়নের জন্য একটি জাভা API ব্যবহার করছেন তবে আপনি JsonGenerator.PRETTY_PRINTING
যখন একটি তৈরি করবেন তখন আপনি সম্পত্তিটি নির্দিষ্ট করতে পারেন JsonGeneratorFactory
।
নিম্নলিখিত উদাহরণটি মূলত আমার ব্লগ পোস্টে প্রকাশিত হয়েছে ।
import java.util.*;
import javax.json.Json;
import javax.json.stream.*;
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JsonGenerator.PRETTY_PRINTING, true);
JsonGeneratorFactory jgf = Json.createGeneratorFactory(properties);
JsonGenerator jg = jgf.createGenerator(System.out);
jg.writeStartObject() // {
.write("name", "Jane Doe") // "name":"Jane Doe",
.writeStartObject("address") // "address":{
.write("type", 1) // "type":1,
.write("street", "1 A Street") // "street":"1 A Street",
.writeNull("city") // "city":null,
.write("verified", false) // "verified":false
.writeEnd() // },
.writeStartArray("phone-numbers") // "phone-numbers":[
.writeStartObject() // {
.write("number", "555-1111") // "number":"555-1111",
.write("extension", "123") // "extension":"123"
.writeEnd() // },
.writeStartObject() // {
.write("number", "555-2222") // "number":"555-2222",
.writeNull("extension") // "extension":null
.writeEnd() // }
.writeEnd() // ]
.writeEnd() // }
.close();
আমার পরিস্থিতিটি হল আমার প্রকল্পটি একটি উত্তরাধিকার (নন-জেএসআর) জেএসএন পার্সার ব্যবহার করে যা সুন্দর মুদ্রণ সমর্থন করে না। তবে, আমার সুন্দর প্রিন্টেড জেএসওএন নমুনা তৈরি করা দরকার; যতক্ষণ না আপনি জাভা 7 এবং তত উপরে ব্যবহার করছেন কোনও অতিরিক্ত লাইব্রেরি যুক্ত না করে এটি সম্ভব:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("JavaScript");
scriptEngine.put("jsonString", jsonStringNoWhitespace);
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)");
String prettyPrintedJson = (String) scriptEngine.get("result");
GSON এর সাথে এক লাইনে প্রিন্টিং মুদ্রণ :
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(jsonString)));
ইনলাইনিংয়ের পাশাপাশি এটি গৃহীত উত্তরের সমতুল্য ।
বিদ্যমান উত্তরগুলির বেশিরভাগই কোনও না কোনও বাহ্যিক গ্রন্থাগারের উপর নির্ভর করে, বা একটি বিশেষ জাভা সংস্করণ প্রয়োজন। এখানে একটি জাসন স্ট্রিং প্রিন্ট করার জন্য একটি সাধারণ কোড, কেবলমাত্র সাধারণ জাভা এপিআই ব্যবহার করে (জাভা in এ আরও উচ্চতর জন্য উপলব্ধ; যদিও এর চেয়ে পুরানো সংস্করণ চেষ্টা করে নি)।
প্রাথমিক ধারণাটি হ'ল জেএসওএন-এর বিশেষ অক্ষরের উপর ভিত্তি করে ফর্ম্যাটিংটি টাইগার করা। উদাহরণস্বরূপ, যদি একটি '{' বা '[' পর্যবেক্ষণ করা হয়, কোডটি একটি নতুন লাইন তৈরি করবে এবং ইনডেন্ট স্তর বাড়িয়ে তুলবে।
দাবি অস্বীকার: আমি কেবল এটি কিছু সাধারণ জেএসএন ক্ষেত্রে (বেসিক কী-মান জোড়, তালিকা, নেস্টেড জেএসওএন) পরীক্ষা করেছিলাম যাতে এটিতে আরও সাধারণ জেএসওএন পাঠ্যের জন্য কিছু কাজের প্রয়োজন হতে পারে যেমন অভ্যন্তরের উদ্ধৃতিগুলির সাথে স্ট্রিং মান বা বিশেষ অক্ষর (, n, \ t ইত্যাদি)।
/**
* A simple implementation to pretty-print JSON file.
*
* @param unformattedJsonString
* @return
*/
public static String prettyPrintJSON(String unformattedJsonString) {
StringBuilder prettyJSONBuilder = new StringBuilder();
int indentLevel = 0;
boolean inQuote = false;
for(char charFromUnformattedJson : unformattedJsonString.toCharArray()) {
switch(charFromUnformattedJson) {
case '"':
// switch the quoting status
inQuote = !inQuote;
prettyJSONBuilder.append(charFromUnformattedJson);
break;
case ' ':
// For space: ignore the space if it is not being quoted.
if(inQuote) {
prettyJSONBuilder.append(charFromUnformattedJson);
}
break;
case '{':
case '[':
// Starting a new block: increase the indent level
prettyJSONBuilder.append(charFromUnformattedJson);
indentLevel++;
appendIndentedNewLine(indentLevel, prettyJSONBuilder);
break;
case '}':
case ']':
// Ending a new block; decrese the indent level
indentLevel--;
appendIndentedNewLine(indentLevel, prettyJSONBuilder);
prettyJSONBuilder.append(charFromUnformattedJson);
break;
case ',':
// Ending a json item; create a new line after
prettyJSONBuilder.append(charFromUnformattedJson);
if(!inQuote) {
appendIndentedNewLine(indentLevel, prettyJSONBuilder);
}
break;
default:
prettyJSONBuilder.append(charFromUnformattedJson);
}
}
return prettyJSONBuilder.toString();
}
/**
* Print a new line with indention at the beginning of the new line.
* @param indentLevel
* @param stringBuilder
*/
private static void appendIndentedNewLine(int indentLevel, StringBuilder stringBuilder) {
stringBuilder.append("\n");
for(int i = 0; i < indentLevel; i++) {
// Assuming indention using 2 spaces
stringBuilder.append(" ");
}
}
এক লাইনে:
String niceFormattedJson = JsonWriter.formatJson(jsonString)
জসন-আইও লিবারে ( https://github.com/jdereg/json-io ) একটি ছোট (75 কে) লাইব্রেরি যা জেডিকে ব্যতীত অন্য কোনও নির্ভরতা নেই।
জেএসএন-কে প্রিন্টিং-প্রিন্টিং ছাড়াও, আপনি জাএস অবজেক্টগুলি (চক্র সহ পুরো জাভা অবজেক্ট গ্রাফগুলি) জেএসএনে সিরিয়ালাইজ করতে পারেন, পাশাপাশি সেগুলি পড়তে পারেন।
এখন এটি JSONLib গ্রন্থাগারের মাধ্যমে অর্জন করা যেতে পারে:
http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html
যদি (এবং কেবলমাত্র) আপনি ওভারলোডেড toString(int indentationFactor)
পদ্ধতি ব্যবহার করেন এবং মানক toString()
পদ্ধতিটি নয়।
আমি এটি API এর নিম্নলিখিত সংস্করণে যাচাই করেছি:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
প্রদত্ত ( বা ) এর জন্য আরও বর্তমান সমাধান JSON-P 1.0 স্পেস ( জেএসআর -353 ) অনুসরণ করে দেখতে পারা যায়:JsonStructure
JsonObject
JsonArray
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import javax.json.Json;
import javax.json.JsonStructure;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.json.stream.JsonGenerator;
public class PrettyJson {
private static JsonWriterFactory FACTORY_INSTANCE;
public static String toString(final JsonStructure status) {
final StringWriter stringWriter = new StringWriter();
final JsonWriter jsonWriter = getPrettyJsonWriterFactory()
.createWriter(stringWriter);
jsonWriter.write(status);
jsonWriter.close();
return stringWriter.toString();
}
private static JsonWriterFactory getPrettyJsonWriterFactory() {
if (null == FACTORY_INSTANCE) {
final Map<String, Object> properties = new HashMap<>(1);
properties.put(JsonGenerator.PRETTY_PRINTING, true);
FACTORY_INSTANCE = Json.createWriterFactory(properties);
}
return FACTORY_INSTANCE;
}
}
JSONLib এ আপনি এটি ব্যবহার করতে পারেন:
String jsonTxt = JSONUtils.valueToString(json, 8, 4);
জাভাডোক থেকে :
আপনি নীচের মত গসন ব্যবহার করতে পারেন
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gson.toJson(object);
জেসন পোস্টটি থেকে জেসন ব্যবহার করে সুন্দর প্রিন্ট করুন
বিকল্পভাবে, আপনি নীচের মত জ্যাকসন ব্যবহার করতে পারেন
ObjectMapper mapper = new ObjectMapper();
String perttyStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
জাভাতে প্র্যাকটি প্রিন্ট জেএসওন পোস্ট থেকে (জ্যাকসন)
এই সাহায্য আশা করি!
Org json ব্যবহার করা হচ্ছে। রেফারেন্স লিঙ্ক
JSONObject jsonObject = new JSONObject(obj);
String prettyJson = jsonObject.toString(4);
গসন ব্যবহার করা। রেফারেন্স লিঙ্ক
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(obj);
জ্যাকসন ব্যবহার করা। রেফারেন্স লিঙ্ক
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String json = mapper.writeValueAsString(obj);
জেনসন ব্যবহার করা। রেফারেন্স লিঙ্ক ।
Genson prettyGenson = new GensonBuilder().useIndentation(true).create();
String prettyJson = prettyGenson.serialize(obj);
জ্যাকসন ব্যবহার করে এটি আমার পক্ষে কাজ করেছে:
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(JSONString)
mapper
থেকে এলো?
আপনি ছোট জসন লাইব্রেরি ব্যবহার করতে পারেন
String jsonstring = ....;
JsonValue json = JsonParser.parse(jsonstring);
String jsonIndendedByTwoSpaces = json.toPrettyString(" ");
ইন্ডস্কোর-জাভা স্থির পদ্ধতি রয়েছে U.formatJson(json)
। পাঁচটি ফর্ম্যাট প্রকারগুলি সমর্থিত: 2, 3, 4, ট্যাব এবং কমপ্যাক্ট। আমি প্রকল্পের রক্ষণাবেক্ষণকারী। সরাসরি উদাহরণ
import com.github.underscore.lodash.U;
import static com.github.underscore.lodash.Json.JsonStringBuilder.Step.TABS;
import static com.github.underscore.lodash.Json.JsonStringBuilder.Step.TWO_SPACES;
public class MyClass {
public static void main(String args[]) {
String json = "{\"Price\": {"
+ " \"LineItems\": {"
+ " \"LineItem\": {"
+ " \"UnitOfMeasure\": \"EACH\", \"Quantity\": 2, \"ItemID\": \"ItemID\""
+ " }"
+ " },"
+ " \"Currency\": \"USD\","
+ " \"EnterpriseCode\": \"EnterpriseCode\""
+ "}}";
System.out.println(U.formatJson(json, TWO_SPACES));
System.out.println(U.formatJson(json, TABS));
}
}
আউটপুট:
{
"Price": {
"LineItems": {
"LineItem": {
"UnitOfMeasure": "EACH",
"Quantity": 2,
"ItemID": "ItemID"
}
},
"Currency": "USD",
"EnterpriseCode": "EnterpriseCode"
}
}
{
"Price": {
"LineItems": {
"LineItem": {
"UnitOfMeasure": "EACH",
"Quantity": 2,
"ItemID": "ItemID"
}
},
"Currency": "USD",
"EnterpriseCode": "EnterpriseCode"
}
}