রেলগুলিতে রুবিতে কীভাবে "সুন্দর" ফর্ম্যাট করে JSON আউটপুট


626

আমি চাইছি আমার জেএসএন আউটপুটটি রেল অন রেলগুলিতে "সুন্দর" বা সুন্দরভাবে ফর্ম্যাটেড হোক।

এখনই, আমি কল করি to_jsonএবং আমার জেএসওএন সমস্ত এক লাইনে রয়েছে। অনেক সময় এটি JSON আউটপুট প্রবাহে সমস্যা আছে কিনা তা দেখতে অসুবিধা হতে পারে।

আমার জেএসওনকে "সুন্দর" বা রেলগুলিতে সুন্দরভাবে ফর্ম্যাট করার জন্য কি কনফিগার করার উপায় আছে?


2
আপনি এটি কোথায় দেখছেন তা নিশ্চিত নন, তবে ওয়েবকিটের কনসোলে এটি কোনও জেএসএন লগড বা অনুরোধ করা থেকে একটি সুন্দর গাছ তৈরি করে।
রায়ান ফ্লোরেন্স

8
এটি করার সময় একটি জিনিস মনে রাখবেন, অতিরিক্ত জোর সাদা স্থানের কারণে আপনার জেএসওএন সামগ্রীর আকার বেলুন করবে। বিকাশের পরিবেশে JSON পড়তে সহজ হওয়া প্রায়শই সহায়ক, তবে একটি উত্পাদনের পরিবেশে আপনি আপনার সামগ্রীটি ততই তাত্পর্যপূর্ণ হতে চান যেমন আপনি এটি ব্যবহারকারীর ব্রাউজারে গতি এবং প্রতিক্রিয়াশীলতার জন্য পেতে পারেন।
টিন ম্যান

2
y my_jsonআপনি কিছু দ্রুত ঠিক করতে চাইলে ব্যবহারটি সুন্দরভাবে ফর্ম্যাট করবে।
এলোমেলো

5
@ র্যান্ডমোরundefined method 'y' for main:Object
নুরেটিন

yরেল কনসোল পাওয়া যায়।
সোফিয়া ফেং

উত্তর:


999

pretty_generate()JSON এর পরবর্তী সংস্করণগুলিতে অন্তর্নির্মিত ফাংশনটি ব্যবহার করুন । উদাহরণ স্বরূপ:

require 'json'
my_object = { :array => [1, 2, 3, { :sample => "hash"} ], :foo => "bar" }
puts JSON.pretty_generate(my_object)

যা আপনাকে পায়:

{
  "array": [
    1,
    2,
    3,
    {
      "sample": "hash"
    }
  ],
  "foo": "bar"
}

32
নিফটি! আমি এটিকে আমার ir / .irbrc এ রেখেছি: Def json_pp (json) JSON. ব্যাখ্যাty_generate (JSON.parse (json)) শেষ করে
TheDeadSerious

10
রেলগুলিতে এটি দরকারী করার জন্য, মনে হচ্ছে আপনার একটি উত্তর দেওয়া উচিত যার মধ্যে কোড রয়েছে যা একই প্রসঙ্গে ব্যবহার করা যেতে পারেformat.json { render :json => @whatever }
আইকনোক্লাস্ট

9
নিশ্চয় প্রশংসাপত্রটি কেবল সার্ভার-সাইড ডিবাগিংয়ের জন্য ব্যবহার করা উচিত? আপনি যদি কোনও নিয়ামকের উপরে উপরের কোডটি আটকে থাকেন তবে সমস্ত প্রতিক্রিয়াতে আপনার প্রচুর অজস্র শ্বেত স্পেস থাকবে, যা ক্লায়েন্ট-সাইড ডিবাগিংয়ের জন্য প্রয়োজনীয় কোনও লবণের মতো সরঞ্জাম হিসাবে (যেমন: ফায়ারব্যাগ) ইতিমধ্যে জেএসওএন প্রশংসাপত্রটি হ্যান্ডেল করে না।
lambshaanxy

8
@ জাপাটোকাল: আপনি সেখানে আরও ভাল বিকল্প হিসাবে বিবেচনা করতে পারেন, তবে প্রশ্নটি কীভাবে এটি রেলগুলিতে কাজ করা যায় তা ছিল। "আপনি জেলগুলিতে এটি করতে চান না" বলা একটি উত্তরহীন। স্পষ্টতই প্রচুর লোকজন এটিগুলিতে করতে চায়।
আইকনোক্লাস্ট

39
আসল পোস্টারটি কোথায় রেলস অ্যাপ্লিকেশনটিতে তিনি এটি ব্যবহার করতে চান সে সম্পর্কে কিছুই বলেনি , তাই আমি রুবির একটি লাইন দিয়ে উত্তর দিয়েছি যা যে কোনও জায়গায় কাজ করবে। এটি ব্যবহার করার জন্য একটি পাগল মধ্যে JSON প্রতিক্রিয়া জেনারেট করতে নিয়ামক , আপনি ইতিমধ্যে আপনার নিজের প্রশ্নের উত্তর: format.json { render :json => JSON.pretty_generate(my_json) }
lambshaanxy

78

র্যাক মিডলওয়্যার এবং রেল 3 আপনাকে ধন্যবাদ আপনার অ্যাপ্লিকেশনটির কোনও নিয়ামক পরিবর্তন না করে প্রতিটি অনুরোধের জন্য সুন্দর JSON আউটপুট করতে পারেন। আমি এই ধরনের মিডলওয়্যার স্নিপেট লিখেছি এবং আমি ব্রাউজার এবং curlআউটপুটে সুন্দরভাবে জেএসএন প্রিন্ট করি ।

class PrettyJsonResponse
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, response = @app.call(env)
    if headers["Content-Type"] =~ /^application\/json/
      obj = JSON.parse(response.body)
      pretty_str = JSON.pretty_unparse(obj)
      response = [pretty_str]
      headers["Content-Length"] = pretty_str.bytesize.to_s
    end
    [status, headers, response]
  end
end

উপরের কোডটি app/middleware/pretty_json_response.rbআপনার রেল প্রকল্পে রাখা উচিত । এবং চূড়ান্ত পদক্ষেপটি মিডলওয়্যারগুলিকে এতে নিবন্ধিত করা config/environments/development.rb:

config.middleware.use PrettyJsonResponse

আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি নাproduction.rb । জেএসএন পুনর্বিবেচনা আপনার উত্পাদন অ্যাপ্লিকেশনটির প্রতিক্রিয়া সময় এবং থ্রুপুট হ্রাস করতে পারে। 'এক্স-প্রেটি-জসন: ট্রু' শিরোনামের মতো শেষ পর্যন্ত অতিরিক্ত যুক্তি চাহিদা অনুসারে ম্যানুয়াল কার্ল অনুরোধগুলির জন্য ফর্ম্যাটিং ট্রিগার করতে প্রবর্তিত হতে পারে।

(Ails.২.৮--5.০.০, রুবি ১.৯.৩-২.২.০, লিনাক্সের সাথে পরীক্ষিত)


2
আপনি কীভাবে অ্যাক্টিভসপোর্টের টু_জসনের নতুন সংজ্ঞাটি পেয়ে যাচ্ছেন? অ্যাক্টিভসপোর্ট উপস্থিত থাকাকালীন এটি আমাকে সুন্দর মুদ্রণ থেকে বিরত রাখে।
আম্মো গয়েটসচ

1
আমি সত্যিই পাত্তাই দিচ্ছি না, টু_জসন, আস_জসন, জুবিল্ডার যা আমি বেশিরভাগই ব্যবহার করি - যাই হোক না কেন, মিডলওয়্যার কোনও জেএসএন আউটপুটকে রূপান্তরিত করে। আমি যখনই সম্ভব ক্লাস খোলার এড়াতে চেষ্টা করি।
জার্মটাস

1
এটি তৈরি করতে আমাকে পার্স লাইনটি পরিবর্তন obj = JSON.parse(response.body.first)করতে হয়েছিল।
কিম্মো লেহ্টো

5
রেল 4 এ দুর্দান্ত কাজ করে ... ধন্যবাদ! আমি এটি আরও লাইব্রেরি-নির্দিষ্ট পদ্ধতিগুলির (অগ্রাহ্য উত্তর হিসাবে) পছন্দ করি। যেহেতু আপনার কেবলমাত্র ডেভ মোডে এটি ব্যবহার করা উচিত, তাই পারফরম্যান্স হিট কোনও বড় বিষয় নয়।
Elsurudo

3
5 রেলগুলিতে আমাকে পরিবর্তন Rack::Utils.bytesize(pretty_str).to_sকরতে হয়েছিল pretty_str.bytesize.to_sএবং এটি দুর্দান্ত কাজ করে!
প্যান্টিও

77

<pre>এইচটিএমএলে থাকা ট্যাগটি JSON.pretty_generate, আপনার দৃষ্টিতে জেএসএনকে রেন্ডার করবে। আমার বিখ্যাত সাহেব যখন আমাকে এটি দেখিয়েছিলেন তখন আমি খুব খুশি হয়েছিলাম:

<% if @data.present? %>
   <pre><%= JSON.pretty_generate(@data) %></pre>
<% end %>

5
তাই পরিষ্কার এবং সংক্ষিপ্ত!
শন স্জুরকো

23

যদি তুমি চাও:

  1. আপনার অ্যাপ থেকে স্বয়ংক্রিয়ভাবে সমস্ত বহির্গামী JSON প্রতিক্রিয়াগুলিকে সুন্দর করুন ret
  2. # To_json / # as_json অবজেক্টটিকে দূষিত করুন
  3. মিডওয়্যারওয়্যার (ইউইউসকে!) ব্যবহার করে জেএসএনকে পার্সিং / পুনরায় রেন্ডারিং এড়িয়ে চলুন
  4. এটি কীভাবে রেল!

তারপরে ... অ্যাকশনকন্ট্রোলার প্রতিস্থাপন করুন: জেএসএনের জন্য রেন্ডারার! আপনার অ্যাপ্লিকেশন নিয়ন্ত্রণকারীকে কেবল নিম্নলিখিত কোডটি যুক্ত করুন:

ActionController::Renderers.add :json do |json, options|
  unless json.kind_of?(String)
    json = json.as_json(options) if json.respond_to?(:as_json)
    json = JSON.pretty_generate(json, options)
  end

  if options[:callback].present?
    self.content_type ||= Mime::JS
    "#{options[:callback]}(#{json})"
  else
    self.content_type ||= Mime::JSON
    json
  end
end

এই সন্ত্রস্ত, কিন্তু এটা আসলে ঘটায় তারিখ / বার ভিন্নভাবে পেশ করে থাকি: gist.github.com/nornagon/9c24b68bd6d3e871add3
nornagon

এটির সাথে বেশ কয়েকটি সমস্যা: (1) JSON . ব্যাখ্যাটি_জেনারেটের প্রয়োজন json.respond_to?(:to_h)বা :to_hash। (২) চমত্কার_জেনারেট এমন জিনিসগুলিতে শ্বাসরোধ করতে পারে যা টু জেসন না করে।
ক্রিস্টোফার ওয়েজবাক

@ উত্তরগঙ্গ আমি এই পরিবর্তনটি প্রয়োগ করি নি এবং আপনি। টো_জসন এবং সুন্দর_জেনের মধ্যে আপনি যে একই রকম পার্থক্য দেখেছি তা পাচ্ছি। আমি এটি কেবল একটি রেল কনসোলে দেখতে পাচ্ছি, সরল আরব নয়। আমি মনে করি এটি সাধারণ রেলের জিনিস হতে পারে, এই প্যাচটির সাথে কিছুই করার নেই। এছাড়াও, উভয় ফর্ম্যাটের জন্য যখন আপনি স্ট্রিংটিকে সময়ে সময়ে রূপান্তর করেন তখন টাইম.পার্স একই ফলাফলটি দেয়। টাইম স্ট্যাম্পগুলির জন্য লগগুলি অনুসন্ধান করার সময় এটি কেবলমাত্র একটি সামান্য অসুবিধা হবে but তবে আপনি যেভাবে যাইহোক কিছু সংখ্যক + যোগ করা আসলে কোনও বড় বিষয় নয়।
কন--

ইস্যু মত দেখাচ্ছে @nornagon আপনি করাত ActiveSupport এর ছিল redefinition , to_json হিসাবে উল্লেখ গোলাবারুদ Goettsch এর মন্তব্য
con--

17

পরীক্ষা করে দেখুন জট্টিল প্রিন্ট । জবিএসএন স্ট্রিংটিকে একটি রুবি হ্যাশে পার্স করুন, তারপরে এটি এর apমতো প্রদর্শন করুন :

require "awesome_print"
require "json"

json = '{"holy": ["nested", "json"], "batman!": {"a": 1, "b": 2}}'

ap(JSON.parse(json))

উপরের সাথে, আপনি দেখতে পাবেন:

{
  "holy" => [
    [0] "nested",
    [1] "json"
  ],
  "batman!" => {
    "a" => 1,
    "b" => 2
  }
}

অসাধারণ মুদ্রণ এমন কিছু রঙ যুক্ত করবে যা স্ট্যাক ওভারফ্লো আপনাকে দেখায় না।


2
তোমার সাথে একমত! দুর্দান্ত_প্রিন্ট সহজ দুর্দান্ত!
আশিষ

2
আমরা আমাদের প্রকল্পগুলির জন্যও দুর্দান্ত_প্রিন্ট ব্যবহার করছি এবং এটি নামটির মতো কাজ করে -> দুর্দান্ত
সাইমন ফ্রানজেন

13

জেএসএনে একটি অ্যাক্টিভেকর্ড অবজেক্ট ডাম্পিং (রেলস কনসোলে):

pp User.first.as_json

# => {
 "id" => 1,
 "first_name" => "Polar",
 "last_name" => "Bear"
}

3
ppস্ট্যান্ডার্ড আউটপুটে মুদ্রণের পরিবর্তে স্ট্রিং পেতে , ব্যবহার করুন User.first.as_json.pretty_inspect। আমার জন্য ভাল কাজ করে।
জনি ওয়াং

12

<pre>এইচটিএমএল কোড ব্যবহার করা এবং pretty_generateএটি ভাল কৌশল:

<%
  require 'json'

  hash = JSON[{hey: "test", num: [{one: 1, two: 2, threes: [{three: 3, tthree: 33}]}]}.to_json] 
%>

<pre>
  <%=  JSON.pretty_generate(hash) %>
</pre>

12

আপনি যদি দেখতে পান যে pretty_generateরুবির জেএসওএন লাইব্রেরিতে নির্মিত বিকল্পটি "সুন্দর" যথেষ্ট নয় তবে আপনার বিন্যাসের জন্য আমি আমার নিজের নেট জেএসওন রত্নকে সুপারিশ করছি ।

এটি ব্যবহার করতে:

gem install neatjson

এবং তারপরে ব্যবহার করুন

JSON.neat_generate

পরিবর্তে

JSON.pretty_generate

রুবির মতো ppএটি মানানসই জিনিসগুলি এবং অ্যারেগুলি এক লাইনে রাখবে, তবে প্রয়োজন অনুসারে একাধিকতে মোড়ানো হবে। উদাহরণ স্বরূপ:

{
  "navigation.createroute.poi":[
    {"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}},
    {"text":"Take me to the airport","params":{"poi":"airport"}},
    {"text":"Let's go to IHOP","params":{"poi":"IHOP"}},
    {"text":"Show me how to get to The Med","params":{"poi":"The Med"}},
    {"text":"Create a route to Arby's","params":{"poi":"Arby's"}},
    {
      "text":"Go to the Hilton by the Airport",
      "params":{"poi":"Hilton","location":"Airport"}
    },
    {
      "text":"Take me to the Fry's in Fresno",
      "params":{"poi":"Fry's","location":"Fresno"}
    }
  ],
  "navigation.eta":[
    {"text":"When will we get there?"},
    {"text":"When will I arrive?"},
    {"text":"What time will I get to the destination?"},
    {"text":"What time will I reach the destination?"},
    {"text":"What time will it be when I arrive?"}
  ]
}

এটি আপনার আউটপুটটিকে আরও কাস্টমাইজ করতে বিভিন্ন ধরণের ফর্ম্যাটিং বিকল্পগুলিকে সমর্থন করে । উদাহরণস্বরূপ, কোলনের আগে / পরে কত স্পেস রয়েছে? কমা আগে / পরে? অ্যারে এবং অবজেক্টের বন্ধনী ভিতরে? আপনি কি আপনার বস্তুর কীগুলি বাছাই করতে চান? আপনি কি কলোনগুলি সব লাইনে সজ্জিত করতে চান?


2
এই রত্নটি শিলা করে - কলোনগুলিতে প্রান্তিককরণ বিশেষভাবে মিষ্টি!
ওয়েবদেবগুই

8

@Gertas দ্বারা এই দুর্দান্ত উত্তরটি থেকে এখানে একটি মিডওয়্যারের সমাধান পরিবর্তন করা হয়েছে । এই দ্রষ্টব্যটি রেলগুলি নির্দিষ্ট নয় - এটি কোনও র্যাক অ্যাপ্লিকেশন সহ কাজ করা উচিত।

এখানে # মিড ব্যবহার করে মিডলওয়্যার কৌশলটি ASCIcast 151 এ ব্যাখ্যা করা হয়েছে: আইফিয়ন বেডফোর্ড র্যাক মিডলওয়্যার

এই কোডটি অ্যাপ্লিকেশন / মিডলওয়্যার / চমত্কার_জসন_সিবাসন.আরবিতে যায় :

class PrettyJsonResponse

  def initialize(app)
    @app = app
  end

  def call(env)
    @status, @headers, @response = @app.call(env)
    [@status, @headers, self]
  end

  def each(&block)
    @response.each do |body|
      if @headers["Content-Type"] =~ /^application\/json/
        body = pretty_print(body)
      end
      block.call(body)
    end
  end

  private

  def pretty_print(json)
    obj = JSON.parse(json)  
    JSON.pretty_unparse(obj)
  end

end

এটি চালু করতে, এটি কনফিগারেশন / এনভায়রনমেন্টস / টেস্ট.আরবি এবং কনফিগারেশন / এনভায়রনমেন্টস / ডেভেলপমেন্ট.আরবিতে যুক্ত করুন:

config.middleware.use "PrettyJsonResponse"

যেহেতু @gertas এই সমাধানটির তার সংস্করণে সতর্ক করে দিয়েছে, এটি উত্পাদনে ব্যবহার করা এড়িয়ে চলুন। এটা কিছুটা ধীর।

4.1.6 কারাগারের সাথে পরীক্ষিত।



4

এখানে আমার সমাধানটি যা আমি নিজের অনুসন্ধানের সময় অন্যান্য পোস্টগুলি থেকে পেয়েছি।

এটি আপনাকে পিপি এবং জেজে আউটপুটটিকে প্রয়োজনীয় হিসাবে একটি ফাইলে প্রেরণ করতে দেয়।

require "pp"
require "json"

class File
  def pp(*objs)
    objs.each {|obj|
      PP.pp(obj, self)
    }
    objs.size <= 1 ? objs.first : objs
  end
  def jj(*objs)
    objs.each {|obj|
      obj = JSON.parse(obj.to_json)
      self.puts JSON.pretty_generate(obj)
    }
    objs.size <= 1 ? objs.first : objs
  end
end

test_object = { :name => { first: "Christopher", last: "Mullins" }, :grades => [ "English" => "B+", "Algebra" => "A+" ] }

test_json_object = JSON.parse(test_object.to_json)

File.open("log/object_dump.txt", "w") do |file|
  file.pp(test_object)
end

File.open("log/json_dump.txt", "w") do |file|
  file.jj(test_json_object)
end

3

আমি রত্ন কোডারে ব্যবহার করেছি এবং এটি বেশ ভালভাবে কাজ করে। বিন্যাসে রঙগুলি অন্তর্ভুক্ত রয়েছে এবং এটি প্রচুর বিভিন্ন ফর্ম্যাটকে স্বীকৃতি দেয়।

আমি এটি এমন এক রত্নে ব্যবহার করেছি যা ডিবাগিং রেল এপিআইয়ের জন্য ব্যবহার করা যেতে পারে এবং এটি বেশ ভালভাবে কাজ করে।

যাইহোক, রত্নটির নামকরণ করা হয়েছে 'এপিআই এক্সপ্লোরার' ( http://www.github.com/toptierlabs/api_explorer )


3

আপনি যদি কোনও জেএসওএন প্রতিক্রিয়া প্রেরণের জন্য কোনও রেলস নিয়ন্ত্রক ক্রিয়ায় এটি দ্রুত বাস্তবায়নের সন্ধান করছেন:

def index
  my_json = '{ "key": "value" }'
  render json: JSON.pretty_generate( JSON.parse my_json )
end

2

আপনি যদি র‌্যাবএল ব্যবহার করছেন তবে JSON. ব্যাখ্যাty_generate ব্যবহার করতে আপনি এখানে বর্ণিত হিসাবে এটি কনফিগার করতে পারেন:

class PrettyJson
  def self.dump(object)
    JSON.pretty_generate(object, {:indent => "  "})
  end
end

Rabl.configure do |config|
  ...
  config.json_engine = PrettyJson if Rails.env.development?
  ...
end

JSON. ব্যাখ্যাটি_জেনারেট ব্যবহার করে একটি সমস্যা হ'ল JSON স্কিমা যাচাইকারীরা আপনার ডেটটাইম স্ট্রিংগুলিতে আর খুশি হবে না। আপনি আপনার কনফিগারেশন / ইনিশিয়েলাইজার / রাবল_কনফিগ.আরবিতে সেগুলি ঠিক করতে পারেন:

ActiveSupport::TimeWithZone.class_eval do
  alias_method :orig_to_s, :to_s
  def to_s(format = :default)
    format == :default ? iso8601 : orig_to_s(format)
  end
end

2

# example of use:
a_hash = {user_info: {type: "query_service", e_mail: "my@email.com", phone: "+79876543322"}, cars_makers: ["bmw", "mitsubishi"], car_models: [bmw: {model: "1er", year_mfc: 2006}, mitsubishi: {model: "pajero", year_mfc: 1997}]}
pretty_html = a_hash.pretty_html

# include this module to your libs:
module MyPrettyPrint
    def pretty_html indent = 0
        result = ""
        if self.class == Hash
            self.each do |key, value|
                result += "#{key}

: #{[Array, Hash].include?(value.class) ? value.pretty_html(indent+1) : value}

" end elsif self.class == Array result = "[#{self.join(', ')}]" end "#{result}" end end class Hash include MyPrettyPrint end class Array include MyPrettyPrint end

1

আমি শিরোনামগুলি, স্থিতি এবং JSON আউটপুটটিকে একটি সেট হিসাবে দরকারী হিসাবে খুঁজে পেয়েছি আমি নিম্নলিখিতটি ব্যবহার করি। কলটির রুটিনটি এখানে রেলস্ক্রাস্ট উপস্থাপনার সুপারিশ অনুসারে ভেঙে গেছে: http://railscast.com/episodes/151-rack-middleware?autoplay=true

  class LogJson

  def initialize(app)
    @app = app
  end

  def call(env)
    dup._call(env)
  end

  def _call(env)
    @status, @headers, @response = @app.call(env)
    [@status, @headers, self]
  end

  def each(&block)
    if @headers["Content-Type"] =~ /^application\/json/
      obj = JSON.parse(@response.body)
      pretty_str = JSON.pretty_unparse(obj)
      @headers["Content-Length"] = Rack::Utils.bytesize(pretty_str).to_s
      Rails.logger.info ("HTTP Headers:  #{ @headers } ")
      Rails.logger.info ("HTTP Status:  #{ @status } ")
      Rails.logger.info ("JSON Response:  #{ pretty_str} ")
    end

    @response.each(&block)
  end
  end

1

সুন্দর মুদ্রণের বৈকল্পিক:

my_object = { :array => [1, 2, 3, { :sample => "hash"}, 44455, 677778, 9900 ], :foo => "bar", rrr: {"pid": 63, "state": false}}
puts my_object.as_json.pretty_inspect.gsub('=>', ': ')

ফলাফল:

{"array": [1, 2, 3, {"sample": "hash"}, 44455, 677778, 9900],
 "foo": "bar",
 "rrr": {"pid": 63, "state": false}}

0

সবচেয়ে সহজ উদাহরণ, আমি মনে করতে পারি:

my_json = '{ "name":"John", "age":30, "car":null }'
puts JSON.pretty_generate(JSON.parse(my_json))

রেল কনসোল উদাহরণ:

core dev 1555:0> my_json = '{ "name":"John", "age":30, "car":null }'
=> "{ \"name\":\"John\", \"age\":30, \"car\":null }"
core dev 1556:0> puts JSON.pretty_generate(JSON.parse(my_json))
{
  "name": "John",
  "age": 30,
  "car": null
}
=> nil
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.