पदानुक्रम डेटा के लिए JSON फ्लैट या नेस्टेड


12

मैंने पहले से ही 5 बार आगे और पीछे स्विच किया है। यह REST एंडपॉइंट /api/tags/आंतरिक उपयोग (कोई भी 3 पार्टी क्लाइंट) के लिए नहीं होगा, मैं केवल इसके साथ काम कर रहा हूं।

मैं इन दो अभ्यावेदन के बीच निर्णय ले रहा हूं:

समतल

{  
   "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?। मुझे ऐसा लगता है। आवश्यकताएँ> आवश्यकताएँ> प्राथमिकताएँ
Laiv

1
@Laiv उस मामले में, मेरे सवाल को फिर से परिभाषित किया जाना चाहिए "कौन से प्रतिनिधित्व अनुभवी डेवलपर्स पसंद करते हैं और क्यों?"
दवतन

क्या ग्राहक को बाद में याद रखने और उपयोग करने के लिए ये आईडी स्थिर समय के साथ ठीक हैं, या, वे सिर्फ स्थानीय संदेश दे रहे हैं?
एरिक इद्दत

@ ErikEidt वे स्थायी, डेटाबेस प्राथमिक कुंजी हैं।
दवतन

क्या आप पानी को उपयोगिता के उपवर्ग के रूप में या उपयोगिता के उदाहरण के रूप में अधिक मानते हैं?
एरिक एदट

जवाबों:


8

आपके उपयोग के मामले पर निर्भर करता है।

JSON का उपयोग स्टैटाटा टाइप की गई भाषाओं के साथ करने पर, आपके संरचना के प्रकारों के लिए मैप करने पर बहुत बड़ा बोनस मिलता है। इसका मतलब है कि चाबियों के सभी नामों को अग्रिम में जाना जाना चाहिए।

इसलिए, यदि आप सेवा का उपभोग करने के लिए जावा का उपयोग करने की योजना बनाते हैं, या यदि आप इसे JSON स्कीमा के साथ दस्तावेज करने की योजना बनाते हैं, तो नंबर एक बहुत क्लीनर होगा (निश्चित रूप से दोनों काम करेगा)।


4

अधिक संदर्भ के बिना कहना मुश्किल है। मैंने दोनों के साथ काम किया है लेकिन उत्तरोत्तर मैंने # 1 से झुकना शुरू कर दिया। सामान्य तौर पर, मैंने सरलता को परिष्कार की तुलना में अधिक प्रासंगिक पाया है।

# 1 में, संस्थाएं और रिश्ते स्पष्ट और स्पष्ट हैं, जबकि # 2 को सोचने का एक अलग तरीका चाहिए। कुछ लोगों के लिए, पेड़ (डेटा संरचनाओं के रूप में) यह स्व-वर्णनात्मक नहीं हैं। कनिष्ठ डेवलपर्स में सोचें जिन्होंने मुश्किल से एक रचना को देखा है। एकत्रीकरण व्यक्ति से अधिक गहरा > पता

मैं # 1 पढ़ सकता हूं:

  • टाइप किए गए टैग का एक संग्रह है

लेकिन, हम केवल 7 शब्दों में # 2 का वर्णन कैसे कर सकते हैं? अगर मैं पेड़ की संरचनाओं से अपरिचित था तो मैं # 2 पढ़ सकता था

  • टैग में दो विशेषताएँ 5 और 17 हैं, लेकिन मुझे उनके प्रकारों का पता नहीं है। जो भी प्रकार है, एक विशेषता है, पाठ

मुझे गलत मत समझो, # 2 एक स्मार्ट समाधान हो सकता है, लेकिन मैं अनावश्यक रूप से चतुराई (या दक्षता) के लिए पठनीयता का त्याग नहीं करूंगा।

इस उत्तर के लेखन के समय, मैं एक ऐसी परियोजना पर काम कर रहा हूं, जिसे एक 3 पार्टी सेवा के साथ एकीकृत करने की आवश्यकता है, जिसके जवाब # 2 के समान हैं। सेवा हमें एक कैलेंडर प्रदान कर रही है: वर्ष, महीने, दिन और दिन

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

जावा डेवलपर के रूप में, मैं सेवा प्रतिक्रिया का डीरियलाइज़ेशन कोड में समाप्त हो गया जो कुछ भी पढ़ने योग्य है क्योंकि गेटर्स के माध्यम से कक्षाओं के लिए कोई प्रत्यक्ष मानचित्रण नहीं है। इसके बजाय, मुझे दस्तावेज़ ( 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.