JSON "[" "দিয়ে শুরু করা যাবে?


178

আমি json.org এ যা পড়তে পারি তার থেকে সমস্ত JSON স্ট্রিংগুলি {(কোঁকড়ানো বন্ধনী) দিয়ে শুরু হওয়া উচিত এবং [অক্ষর (বর্গাকার বন্ধনী) JSON এ একটি অ্যারের উপাদানকে উপস্থাপন করে।

আমি json4jগ্রন্থাগারটি ব্যবহার করি এবং আমি একটি ইনপুট পেয়েছি যা দিয়ে শুরু হয় [, তাই আমি এটি বৈধ JSON বলে মনে করি না। আমি জেএসএন স্কিমাটির জন্য সংক্ষিপ্তভাবে তাকালাম, তবে আমি সত্যিই এটি খুঁজে পেলাম না যে কোনও জেএসওএন ফাইল দিয়ে আরম্ভ করা যায় না [, বা এটি কেবল শুরু হতে পারে {


(আপাতদৃষ্টিতে বেশ কয়েকটি দু'চিকল্পিত জেএসওএন লাইব্রেরি রয়েছে যা আপনাকে বহিরাগত সর্বাধিক জেএসওএন প্রকারের জানা প্রয়োজন here এখানে সরল "ফিক্স" হ'ল জেএসএন স্ট্রিংটি ঘিরে রাখা [], এটিটিকে অ্যারে হিসাবে পার্স করা এবং প্রথম অ্যারে উপাদান নেওয়া take)
হট লিক্স

স্পষ্টতই এটি {এবং এটি দিয়ে শুরু করা নিরাপদ নয় [যাতে এটি কোনও বৈধ জাভাস্ক্রিপ্ট অ্যারে নয়, এবং সিএসআরএফ আক্রমণগুলির জন্য ব্যবহার করা যাবে না।
ডেভিড ক্লেম্পফনার

উত্তর:


218

জেএসএন হ'ল একটি অ্যারে বা কোনও বস্তু হতে পারে। বিশেষত json.org বন্ধ:

JSON দুটি কাঠামোর উপর নির্মিত:

  • নাম / মান জোড়ের সংগ্রহ। বিভিন্ন ভাষায়, এটি কোনও অবজেক্ট, রেকর্ড, কাঠামো, অভিধান, হ্যাশ টেবিল, কীড তালিকা বা সহযোগী অ্যারে হিসাবে উপলব্ধি করা যায়।
  • একটি মান আদেশের তালিকা। বেশিরভাগ ভাষায় এটি
    অ্যারে, ভেক্টর, তালিকা বা ক্রম হিসাবে উপলব্ধি করা হয় ।

এরপরে এটি দুটি কাঠামোগুলিকে বর্ণনা করে: একটি JSON অবজেক্ট একটি JSON অ্যারে

মনে রাখবেন যে শুরুর এবং শেষের অক্ষরগুলি যথাক্রমে কোঁকড়া বন্ধনী এবং বর্গাকার বন্ধনী।


এবং এখান থেকে সম্পাদনা করুন: http://www.ietf.org/rfc/rfc4627.txt

একটি JSON পাঠ্য টোকেনের ক্রম। টোকেনের সেটটিতে ছয়টি কাঠামোগত অক্ষর, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম অন্তর্ভুক্ত রয়েছে।

একটি JSON পাঠ্য সিরিয়ালযুক্ত বস্তু বা অ্যারে।

আপডেট (2014)

মার্চ ২০১৪ অবধি, একটি নতুন জেএসএন আরএফসি রয়েছে ( 15১৫৯ ) যা সংজ্ঞাটি কিছুটা সংশোধন করে (পৃষ্ঠা ৪/৫ দেখুন)।

আরএফসি 4627 প্রতি সংজ্ঞাটি ছিল: JSON-text = object / array

এটি আরএফসি 7159 এ পরিবর্তিত হয়েছে: JSON-text = ws value ws

যেখানে wsহোয়াইটস্পেস উপস্থাপন করে এবং valueনিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:

একটি JSON মান একটি অবজেক্ট, অ্যারে, সংখ্যা, বা স্ট্রিং, বা নিম্নলিখিত তিনটি আক্ষরিক নামের হতে হবে:

false null true

সুতরাং, প্রশ্নের উত্তর এখনও হ্যাঁ, জেএসওএন পাঠ্যটি একটি বর্গাকার বন্ধনী (অর্থাত্ একটি অ্যারে) দিয়ে শুরু হতে পারে। কিন্তু বস্তু এবং অ্যারে ছাড়াও, এটি এখন একটি নম্বর, স্ট্রিং বা মান হতে পারে false, nullবা true

এছাড়াও, এটি আমার পূর্ববর্তী আরএফসি 4627 উদ্ধৃতি (জোর দেওয়া যুক্ত) থেকে পরিবর্তিত হয়েছে:

একটি JSON পাঠ্য টোকেনের ক্রম। টোকেনের সেটটিতে ছয়টি কাঠামোগত অক্ষর, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম অন্তর্ভুক্ত রয়েছে।

একটি JSON পাঠ্য একটি ক্রমিক মান । নোট করুন যে JSON এর পূর্ববর্তী নির্দিষ্ট কিছু নির্দিষ্টকরণগুলি একটি JSON পাঠ্যকে একটি বস্তু বা অ্যারে হিসাবে আবদ্ধ করেছিল। যে বাস্তবায়নগুলি কেবলমাত্র অবজেক্ট বা অ্যারে তৈরি করে যেখানে একটি জেএসএন পাঠ্য কল করা হয়েছে সেই অর্থে আন্তঃযোগযোগ্য হবে যে সমস্ত বাস্তবায়ন এগুলি JSON পাঠ্যকে মেনে চলবে।


ধন্যবাদ, আমি এই চিত্রটি বহুবার দেখি, স্পষ্টতই json4j লাইব্রেরিতে একটি সমস্যা আছে, যা জেসন পছন্দ করে না [।
টিবেরিউ

1
@ টিবেরিউ হাজাস: আমি যখন এটি প্রথম খুঁজে পেয়েছি তখন এটি বুঝতে আমার একটু সময় লেগেছে। তবে জেএসএনের কয়েকটি উদাহরণ দেখে এবং তাদের তুলনা করার পরে, তারা এটি কীভাবে করেছে তা আমি সত্যিই পছন্দ করি। Json4j সম্পর্কিত, সম্ভবত আপনি json4j গ্রন্থাগারের স্রষ্টাকে একটি বাগ রিপোর্ট জমা দিতে পারেন ।
রিচার্ড মার্স্কেল - ড্রাকির

আমি পার্টির জন্য সম্ভবত দেরি করেছি। তবে আমি আরএফসি 8259 এ যা পেয়েছি তা বলে যে একটি জেএসওএন পাঠ্যটি ইউনিকোড কোড পয়েন্ট থেকে তৈরি টোকেনগুলির একটি ক্রম যা জেএসওএন মান ব্যাকরণের সাথে সঙ্গতিপূর্ণ। টোকেনের সেটটিতে ছয়টি কাঠামোগত টোকেন, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম টোকেন অন্তর্ভুক্ত রয়েছে। এটির মতো এমন কিছু বৈধ বলে মনে হচ্ছে: {"1234"}, {সত্য}} তবে এটি কি উপস্থাপন করে? এটি কোনও অ্যারে নয়, কারণ কোনও <কোড> [] </code> নেই, না এটি কোনও বস্তু নয়, কারণ তাদের মধ্যে দুটি রয়েছে।
নিকোলাস হামফ্রে

1
@ নিকোলাসহমফ্রে আমি উপরে যা লিখেছি তা এখনও 8259 এ প্রযোজ্য that একই বিভাগ 2 (জেএসওএন ব্যাকরণ) জেএসওএন-পাঠ্য (ওরফে একটি জেএসওএন নথি) হিসাবে সংজ্ঞায়িত করা হয়েছে: JSON-text = ws value wsযেখানে "একটি জেএসওএন মান একটি অবজেক্ট, অ্যারে, সংখ্যা বা স্ট্রিং হতে হবে, বা নিম্নলিখিত তিনটি আক্ষরিক নামের মধ্যে একটি: ধারা 3 (মান) অনুযায়ী মিথ্যা, নাল, সত্য "। আপনার উদাহরণ সেই সীমাবদ্ধতাগুলি পূরণ করে না এবং তাই জেএসএন বৈধ নয়।
রিচার্ড মার্স্কেল - ড্রাকির

8

আপনি যে স্ট্রিংটি পার্স করছেন সেটি যদি JSONArray.parseবামবন্ধনী বন্ধনী দিয়ে শুরু হয় ([) আপনি JSONArray অবজেক্টটি ফিরে পেতে ব্যবহার করতে পারেন এবং তারপরে ফিরে আসা JSONArray এর মাধ্যমে 0 থেকে আমিget(i) যেখানে সূচক সেখানে আপনি ব্যবহার করতে পারেন ।size()-1

import java.io.IOException;
import com.ibm.json.java.JSONArray;
import com.ibm.json.java.JSONObject;

public class BookListTest {
   public static void main(String[] args) {
      String jsonBookList = "{\"book_list\":{\"book\":[{\"title\":\"title 1\"},{\"title\":\"title 2\"}]}}";
      Object book_list;
      try {
         book_list = JSONObject.parse(jsonBookList);
         System.out.println(book_list);
         Object bookList = JSONObject.parse(book_list.toString()).get("book_list");
         System.out.println(bookList);
         Object books = JSONObject.parse(bookList.toString()).get("book");
         System.out.println(books);
         JSONArray bookArray = JSONArray.parse(books.toString());
         for (Object book : bookArray) {
            System.out.println(book);
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

যা উত্পাদিত যেমন:

{"book_list":{"book":[{"title":"title 1"},{"title":"title 2"}]}}
{"book":[{"title":"title 1"},{"title":"title 2"}]}
[{"title":"title 1"}, {"title":"title 2"}]
{"title":"title 1"}
{"title":"title 2"}

দ্রষ্টব্য: আপনি কল করার চেষ্টা করলে আপনি JSONObject.parse(books.toString());যে ত্রুটিটি ভোগ করেছেন তা পেয়ে যাবেন:

java.io.IOException: Expecting '{' on line 1, column 2 instead, obtained token: 'Token: ['

1
আরও সাধারণ কোডটি উদাহরণস্বরূপ JSONArray বনাম উদাহরণ হিসাবে ব্যবহার করতে পারে JSONObject অবজেক্টে ফিরে আসা কলটি থেকে বস্তুর বিশ্লেষণ করতে কোন শ্রেণিটি ব্যবহার করা উচিত তা নির্ধারণ করার জন্য ...
নাথানিয়েল মিলস

5

JSON.ORG ওয়েবসাইট বলে ....

https://www.json.org/

সাইটটি পরিষ্কারভাবে নিম্নলিখিতটি জানিয়েছে:

JSON দুটি কাঠামোর উপর নির্মিত:

  1. নাম / মান জোড়ের সংগ্রহ। বিভিন্ন ভাষায়, এটি কোনও অবজেক্ট, রেকর্ড, কাঠামো, অভিধান, হ্যাশ টেবিল, কীড তালিকা বা সহযোগী অ্যারে হিসাবে উপলব্ধি করা যায়।

  2. একটি মান আদেশের তালিকা। বেশিরভাগ ভাষায় এটি অ্যারে, ভেক্টর, তালিকা বা ক্রম হিসাবে উপলব্ধি করা হয়।

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

বস্তু:

একটি অবজেক্ট নাম / মান জোড়গুলির একটি আনর্ডারড সেট। একটি বস্তু {(বাম বন্ধনী) দিয়ে শুরু হয় এবং} (ডান ধনুর্বন্ধনী) দিয়ে শেষ হয়। প্রতিটি নাম অনুসরণ করে: (কোলন) এবং নাম / মান জোড়া পৃথক করা হয়, (কমা)।

{string: value, string: value}

ARRAY:

একটি অ্যারে হ'ল আদেশের মান। একটি অ্যারে [(বাম বন্ধনী) দিয়ে শুরু হয় এবং] (ডান বন্ধনী) দিয়ে শেষ হয়। মানগুলি (কমা) দ্বারা পৃথক করা হয়।

[value, value, value ….]

: VALUE

একটি মান ডাবল উদ্ধৃতি, বা একটি সংখ্যা, বা সত্য বা মিথ্যা বা নাল, বা একটি বস্তু বা অ্যারে হতে পারে string এই কাঠামো নেস্ট করা যেতে পারে।

: STRING

একটি স্ট্রিং শূন্য বা আরও বেশি ইউনিকোড অক্ষরগুলির অনুক্রম, ডাবল উদ্ধৃতিতে মোড়ানো, ব্যাকস্ল্যাশ পলায়ন ব্যবহার করে। একটি অক্ষর একটি একক অক্ষরের স্ট্রিং হিসাবে প্রতিনিধিত্ব করা হয়। একটি স্ট্রিং অনেকটা সি বা জাভা স্ট্রিংয়ের মতো।

NUMBER টি:

একটি সংখ্যা অনেকটা সি বা জাভা সংখ্যার মতো, অষ্টাল এবং হেক্সাডেসিমাল ফর্ম্যাটগুলি ব্যবহার করা হয় না।

হোয়াইটস্পেস সম্পর্কে:

যে কোনও টোকেনের জুড়ে হোয়াইটস্পেস .োকানো যেতে পারে। কয়েকটি এনকোডিং বিশদ বাদে, যা সম্পূর্ণরূপে ভাষাটি বর্ণনা করে।


উদাহরণ সহ ভাল; এটি আমাকে একটি JSON যাচাইকারীর জন্য আমার ইউনিট পরীক্ষা লেখা শেষ করতে সহায়তা করেছে। আমি নিশ্চিত ছিলাম না যে স্ট্রিং বলতে কী বোঝায় (উদাহরণস্বরূপ, এটি অবশ্যই ডাবল উদ্ধৃতিগুলির মধ্যে একটি স্ট্রিং হওয়া উচিত)।
gimlichael

আমি দেখতে পাচ্ছি যে এটি কীভাবে বিভ্রান্ত হতে পারে, বাক্যটি আরও কিছুটা সংক্ষিপ্ত আকারে শুরু হতে পারে: "শূন্য বা আরও বেশি ইউনিকোড চরিত্রের ক্রম ...." আমি বিশ্বাস করি যে লেখক এটি জোর দেওয়ার জন্য যুক্ত করেছেন। আমি এটিকে এমনভাবে রেখেছি যা কিছু মূল বিষয়গুলি দেখতে আরও সহজ করে তুলেছিল। যদিও দেরিতে সাড়া পাওয়া গেছে, আমি আশা করি যে প্রয়োজন হলে কিছু স্পষ্টতা যুক্ত করুন।
জে মোরেনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.