2009-04-26 16 views
8

db- अगर मैं एक json फ़ाइल है कि कुछ इस तरह दिखता है:आयात json फ़ाइल

{"name":"bob","hi":"hello"} 
{"name":"hello","hi":"bye"} 

वहाँ CouchDB में इस आयात करने के लिए एक विकल्प है?

उत्तर

2

कि JSON ऑब्जेक्ट को कॉच डीबी द्वारा स्वीकार नहीं किया जाएगा। एक सर्वर अनुरोध के साथ सभी डेटा को स्टोर करने के लिए उपयोग करें:

{ 
    "people": 
    [ 
     { 
     "name":"bob", 
     "hi":"hello" 
     }, 
     { 
     "name":"hello", 
     "hi":"bye" 
     } 
    ] 
} 

वैकल्पिक रूप से, प्रत्येक पंक्ति के लिए एक अलग CouchDB अनुरोध सबमिट करें।

आयात कमांड लाइन से CouchDB में फ़ाइल cURL का उपयोग कर:

curl -vX POST https://user:[email protected]:1234/database \ 
    -d @- -# -o output -H "Content-Type: application/json" < file.json 
0

http://github.com/zaphar/db-couchdb-schema/tree/master

मेरे डीबी :: CouchDB :: स्कीमा मॉड्यूल एक स्क्रिप्ट में दस्तावेजों की एक श्रृंखला लोड हो रहा है के साथ मदद करने के लिए है एक कॉच डीबी डाटाबेस। Couch_schema_tool.pl स्क्रिप्ट एक फ़ाइल को तर्क के रूप में स्वीकार करती है और उस फ़ाइल में सभी दस्तावेज़ों को डेटाबेस में लोड करती है। बस इतना की तरह एक सरणी में प्रत्येक दस्तावेज़ डाल:

[ { "नाम": "बॉब", "हाय": "हैलो"}, { "नाम": "हैलो", "हाय": "अलविदा "} ]

यह उन्हें आपके लिए डेटाबेस में लोड करेगा। छोटी चेतावनी हालांकि मैंने कॉच डीबी के नवीनतम के खिलाफ अपने नवीनतम कोड का परीक्षण नहीं किया है, इसलिए यदि आप इसका इस्तेमाल करते हैं और यह टूट जाता है तो मुझे बताएं। मुझे शायद नए एपीआई परिवर्तनों को फिट करने के लिए कुछ बदलना होगा।

जेरेमी

5

आप लिनक्स पर कर रहे हैं, आप काउच के लिए मान्य JSON फ़ाइलों की सामग्री को पोस्ट करने के लिए एक त्वरित खोल स्क्रिप्ट लिख सकते हैं।

सोफे परीक्षण करने के लिए मैं कुछ इस तरह किया:

cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json" 

myFile.json json सामग्री मैं डेटाबेस में आयात करना चाहा।

एक अन्य विकल्प है, अगर आप कमांड लाइन पसंद नहीं है या लिनक्स का उपयोग नहीं कर रहे हैं, और एक जीयूआई चाहें, तो आप की तरह RESTClient

+0

हर किसी को "पोस्ट" की तलाश में: यह libwww-perl पैकेज का हिस्सा है। – ofrommel

3

एक उपकरण का उपयोग कर सकते हैं हाँ, यह मान्य JSON नहीं है ...

JSON-वस्तुओं को आयात करने के मैं कर्ल (http://curl.haxx.se) का उपयोग करें:

curl -X PUT -d @my.json http://admin:[email protected]:5984/db_name/doc_id 

जहां my.json एक फ़ाइल JSON-वस्तु में है।

curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:[email protected]:5984/db_name/doc_id 

आप एक doc_id की जरूरत नहीं है, तो आप इसके लिए CouchDB पूछ सकते हैं:

curl -X GET http://127.0.0.1:5984/_uuids?count=1 
+0

किसी और के लिए यहां पहले उदाहरण पर सामग्री-प्रकार के बारे में कोई त्रुटि प्राप्त करने के लिए, इसे आजमाएं: 'curl -X POST -d @ data.json http://127.0.0.1:52984/database/_bulk_docs -H' सामग्री-प्रकार : एप्लिकेशन/जेसन ' –

+0

डाउनवॉटेड क्योंकि मुझे लगता है कि सवाल कई दस्तावेज़ों के बारे में पूछ रहा है, न केवल एक। मेरा मानना ​​है कि आप जवाब दे रहे हैं कि केवल एक दस्तावेज़ कैसे आयात करें। –

6

बेशक आप आपके JSON-वस्तु (एक फ़ाइल के बिना) CouchDB में सीधे डाल सकते हैं और साथ ही के @Millhouse जवाब से लेकिन मेरी फ़ाइल में अनेक डॉक्स के साथ शुरू मैं इस्तेमाल किया

cat myFile.json | lwp-request -m POST -sS "http://localhost/dbname/_bulk_docs" -c "application/json" 

POST की lwp-request लेकिन POST करता है एक उपनाम है डेबियन पर काम नहीं लग रहा है। यदि आप lwp-request का उपयोग करते हैं तो आपको ऊपर के रूप में -m के साथ विधि सेट करने की आवश्यकता है।

पिछला _bulk_docs कई दस्तावेज़ों को एक बार में अपलोड करने की अनुमति देता है।

http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API

+0

bulk_doc api में 'd" दस्तावेज़ों के अंदर घोंसला वाले सभी दस्तावेज़ होना चाहिए: [दस्तावेज़]} 'ऑब्जेक्ट। –

2

यह मेरी समस्या का समाधान नहीं है, लेकिन मैं इस पाया मेरी इस मुद्दे को हल करने के लिए:

फाइल में एक CouchDB डेटाबेस निर्यात का एक आसान तरीका, टर्मिनल विंडो में निम्नलिखित कर्ल आदेश चलाकर है:

curl -X GET http://127.0.0.1:5984/[mydatabase]/_all_docs\?include_docs\=true > /Users/[username]/Desktop/db.json 

अगला कदम नीचे की तरह कुछ की तरह लग रहे करने के लिए (ध्यान दें _ id) निर्यात json फ़ाइल संशोधित करने के लिए है:

{ 
    "docs": [ 
     {"_id": "0", "integer": 0, "string": "0"}, 
     {"_id": "1", "integer": 1, "string": "1"}, 
     {"_id": "2", "integer": 2, "string": "2"} 
    ] 
} 

मुख्य बिट आपको "डॉक्स" कोड ब्लॉक में दस्तावेज़ जोड़ना है। यह हो जाने पर आप एक CouchDB डेटाबेस से डेटा आयात करने के लिए निम्न कर्ल आदेश चला सकते हैं:

curl -d @db.json -H "Content-type: application/json" -X POST http://127.0.0.1:5984/[mydatabase]/_bulk_docs 

एक डेटाबेस नकल आप एक सर्वर से दूसरी एक डेटाबेस नकल करना चाहते हैं। भागो निम्न आदेश:

curl -H 'Content-Type: application/json' -X POST http://localhost:5984/_replicate -d ' {"source": "http://example.com:5984/dbname/", "target": "http://[email protected]:5984/dbname/"}' 

मूल पोस्ट: http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php

2

शायद थोड़ा जवाब देने के लिए देर से। लेकिन तुम अजगर का उपयोग कर सकते हैं की तुलना में आप ऐसा करने CouchDB मॉड्यूल का उपयोग कर सकते हैं:

import couchdb 
import json 
couch = couchdb.Server(<your server url>) 
db = couch[<your db name>] 
with open(<your file name>) as jsonfile: 
    for row in jsonfile: 
     db_entry = json.load(row) 
     db.save(db_entry) 

मुझे लगता है कि ऐसा करने के लिए अजगर स्क्रिप्ट बनाने के (मैं इंटरनेट पर एक नहीं मिल सकता है)।

पूर्ण स्क्रिप्ट है:

http://bitbucket.org/tdatta/tools/src/

(नाम -> jsonDb_to_Couch।py)

आप पूर्ण रेपो और डाउनलोड करते हैं:

  1. पाठ भागो load_dbs

बनाने "आईडी"

  • को json फ़ाइलों में सभी "_ id" की जगह यह आपके स्थानीय सोफे इंस्टॉलेशन में 0 डेटाबेस बनाएगा

    आशा है कि नए लोगों की मदद करें (जैसे मुझे)

  • +1

    मुझे विश्वास है कि अपने कोड निम्न परिवर्तन करने के लिए माना जाता है: 'सोफे = couchdb.server (<अपने सर्वर यूआरएल>)' लापता यूआरएल 'खुला के साथ (<अपनी फ़ाइल का नाम>)' ब्रैकेट के बजाय करीब कोष्ठक 'db_entry = json.loads (पंक्ति) लोड लोड के बजाय लोड –

    +0

    धन्यवाद जेरेड। इसे मूल पोस्ट में फिक्स्ड करें। – Tanmay

    संबंधित मुद्दे