শ্রেণিবদ্ধ ডেটা জন্য ফ্ল্যাট বা নেস্টেড JSON?


12

আমি ইতিমধ্যে 5 বার পিছনে পিছনে স্যুইচ করেছি। এই REST এন্ডপয়েন্টটি /api/tags/অভ্যন্তরীণ ব্যবহারের জন্য হবে (কোনও তৃতীয় পক্ষের ক্লায়েন্ট নেই), আমি কেবল এটির সাথে কাজ করছি।

আমি এই দুটি উপস্থাপনার মধ্যে সিদ্ধান্ত নিচ্ছি:

সমান

{  
   "types":[  
      {  
         "id":1,
         "text":"Utility"
      },
      {  
         "id":7,
         "text":"Lease Terms"
      },
   ],
   "tags":[
      {  
         "id":8,
         "text":"Water",
         "type":1
      },
      {  
         "id":9,
         "text":"Electricity",
         "type":1
      },
      {  
         "id":5,
         "text":"Minimum 12 month lease",
         "type":7
      },
      {  
         "id":17,
         "text":"lease negotiable/flexible",
         "type":7
      },
   ]
}
  • এটি কিছুটা মডুলার সামঞ্জস্যতা না ভেঙে অন্য শীর্ষ স্তর যেমন "দেশ" যুক্ত করতে পারে।

নেস্টেড

{  
   "1":{  
      "text":"Utility",
      "tags":{  
         "8":{  
            "text":"Water"
         },
         "9":{  
            "text":"Electricity"
         },
      }
   },
   "2":{  
      "text":"Lease Terms",
      "tags":{  
         "5":{  
            "text":"Minimum 12 month lease"
         },
         "17":{  
            "text":"lease negotiable/flexible"
         },
      }
   },
}
  • এটি ইতিমধ্যে ব্যবহারযোগ্য বিন্যাসে রয়েছে। ডেটা ব্যবহারের আগে লুপ করার দরকার নেই।
  • কিছু ব্যান্ডউইথ সংরক্ষণ করে। জিজিপের পরেও এটি কিছুটা ছোট।

কোনটি ব্যবহার করা উচিত, এবং কেন? যদি এটি ব্যক্তিগত পছন্দের বিষয় হয় তবে অভিজ্ঞ বিকাশকারীরা কোন প্রতিনিধিত্ব পছন্দ করবেন এবং কেন?


Is this a matter of personal preference?। আমি তাই মনে করি. প্রয়োজনীয়তা> প্রয়োজন> পছন্দসমূহ
লাইভ

1
@ লাইভ সেক্ষেত্রে আমার প্রশ্নটি পুনর্বিবেচনা করা উচিত "অভিজ্ঞ বিকাশকারীরা কোন প্রতিনিধিত্ব পছন্দ করেন এবং কেন?"
ডিভিটন

এই আইডি কি সময়ের সাথে স্থিতিশীল থাকে এবং ক্লায়েন্টের মনে রাখা ও পরে ব্যবহার করা ঠিক আছে, বা এগুলি কেবল স্থানীয় বার্তা রয়েছে?
এরিক tদ

@ এরিকইডট তারা স্থায়ী, ডাটাবেস প্রাথমিক কী।
ডিভিটন

আপনি কি জলকে আরও উপযোগের সাবক্লাস হিসাবে বিবেচনা করছেন বা ইউটিলিটির উদাহরণ হিসাবে আরও বেশি?
এরিক tদ

উত্তর:


8

আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে।

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

সুতরাং, আপনি যদি পরিষেবাটি গ্রাস করতে জাভা ব্যবহার করার পরিকল্পনা করেন, বা আপনি যদি এটি JSON স্কিমা দিয়ে নথিভুক্ত করার পরিকল্পনা করেন তবে প্রথম নম্বরটি অনেক ক্লিনার হবে (অবশ্যই উভয়ই কাজ করবে)।


4

আরও প্রসঙ্গে না বলা শক্ত। আমি উভয়ের সাথেই কাজ করেছি তবে ক্রমান্বয়ে আমি # 1 এ ঝুঁকতে শুরু করেছি। সাধারণভাবে, আমি পরিশীলনের চেয়ে সরলতাটিকে আরও প্রাসঙ্গিক বলে মনে করেছি।

# 1-এ, সত্ত্বা এবং সম্পর্কগুলি সুস্পষ্ট এবং সুস্পষ্ট, যেখানে # 2 এর জন্য আলাদা চিন্তাভাবনা প্রয়োজন। কিছু লোকের জন্য, গাছগুলি (ডেটা স্ট্রাকচার হিসাবে) সেই স্ব-বর্ণনামূলক নয়। জুনিয়র বিকাশকারীদের কথা ভাবেন যারা কমবেশি একটি সংকলন দেখেছেন | ব্যক্তি> ঠিকানার চেয়ে আরও গভীরভাবে সমষ্টি ।

আমি এই হিসাবে # 1 পড়তে পারি:

  • টাইপড ট্যাগগুলির সংগ্রহ রয়েছে

তবে, কীভাবে আমরা কেবল 2 শব্দটিতে # 2 বর্ণনা করতে পারি? আমি যদি গাছের কাঠামোর সাথে অপরিচিত ছিলাম তবে আমি # 2 পড়তে পারি

  • ট্যাগগুলিতে 5 এবং 17 এর দুটি বৈশিষ্ট্য রয়েছে তবে আমি তাদের প্রকারগুলি জানি না। টাইপ যাই হোক না কেন, এর একটি বৈশিষ্ট্য, পাঠ্য রয়েছে

আমাকে ভুল করবেন না, # 2 এটি একটি স্মার্ট সমাধান হতে পারে, তবে আমি অযত্নে চালাকি (বা দক্ষতার) জন্য পাঠযোগ্যতার ত্যাগ করব না।

এই উত্তরটি লেখার সময়, আমি এমন একটি প্রকল্পে কাজ করছি যা একটি তৃতীয় পক্ষের পরিষেবাতে সংহত করা দরকার যা প্রতিক্রিয়া # 2 এর সাথে খুব মিল। পরিষেবাটি আমাদের একটি ক্যালেন্ডার সরবরাহ করে: বছর, মাস, দিন এবং দিনের ঘন্টা

 { "2017" : { "01": { "01" : ["00:00", "01:00", "02:00"] } } } 

জাভা বিকাশকারী হিসাবে আমি, পরিষেবার প্রতিক্রিয়াটির deserialization কোডে শেষ হয়েছে যা পাঠযোগ্য তবে কিছুই নেই কারণ getters | setters | কনস্ট্রাক্টরের মাধ্যমে ক্লাসে সরাসরি ম্যাপিং নেই। পরিবর্তে, আমাকে ডকুমেন্টটি ( getNode, getSiblings, getNodeName, getChildAsText, isNodeObject, isText, ইত্যাদি) অতিক্রম করতে হয়েছিল এবং আমার ক্লাসগুলির হায়ারার্কি ম্যানুয়ালি পপুলেট করতে হয়েছে । অবশেষে, আমি টাইমস্ট্যাম্পগুলির সংকলনে সংখ্যার গাছটি ম্যাপ করতে পেরেছি! আপনি কোন কাঠামোটি পড়েন এবং ডিসেরিয়ালাইজ করা সহজ? আপনি যদি ক্লায়েন্টের পাশে থাকেন তবে আপনি কোনটি পেতে চান?


1

আপনি যদি অন্য কিছু না চান তবে আপনি কেবল ব্যবহার করতে পারেন:

{
    "Utility": {
        "8": "Water",
        "9": "Electricity"
     },
     "Lease Terms": {
        "5": "Minimum 12 month lease",
        "17": "lease negotiable/flexible"
     }
}

দুর্ভাগ্য এখানে যে JSON কেবল কী হিসাবে স্ট্রিংয়ের অনুমতি দেয়।


বা সম্ভাব্য "Utility": ["Water","Electricity"]ইত্যাদি
কালেথ

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