# How to insert data from a json file using bulk API in ES2.1

**URL:** <https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758>\
**Category:** Elasticsearch\
**Created:** [December 9, 2015, 3:32pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758 "2015-12-09T15:32:10Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [December 9, 2015, 3:32pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/1 "2015-12-09T15:32:10Z")

</div>

Hi Experts,

I have downloaded accounts.json from [here](https://github.com/bly2k/files/blob/master/accounts.zip?raw=true) and saved it in my local drive . Path is E:\data\accounts.json

Now when I fired  
`POST /bank/account/_bulk?pretty --data-binary E:\data\accounts.json`  
I am getting below error  
{  
"error": {  
"root\_cause": [  
{  
"type": "parse\_exception",  
"reason": "Failed to derive xcontent"  
}  
],  
"type": "parse\_exception",  
"reason": "Failed to derive xcontent"  
},  
"status": 400  
}

Please suggest what needs to be done here . I believe bulk command is not able to pick the file path.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 9, 2015, 3:48pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/2 "2015-12-09T15:48:09Z")

</div>

`accounts` ? `shakespeare` ?

I'm lost

---

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [December 9, 2015, 3:53pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/3 "2015-12-09T15:53:01Z")

</div>

oops my mistake actually i was trying to insert data for both ,that is account and shakespeare.

For now I want to learn it for accounts , I download it from [here](https://github.com/bly2k/files/blob/master/accounts.zip?raw=true) and saved it my local drive i.e E:/data/accounts.json.

My question is how I tell bulk API that the above json file is at what path ?

---

<div class="post-metadata">

**Author:** ![ryodo](https://avatars.discourse-cdn.com/v4/letter/r/b3f665/32.png) [@ryodo](https://discuss.elastic.co/u/ryodo)\
**Post date:** [December 9, 2015, 3:56pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/4 "2015-12-09T15:56:17Z")

</div>

i use this code

> $j = array(  
> "association\_key" =\> $k['id'],  
> "text" =\> $k['text'],  
> "photo" =\> $k['photo\_tweet']);  
> $j = json\_encode($j);  
> $json\_doc.='  
> { "create" : { "\_index" : "'.$index.'", "\_type" : "'.$doc\_type.'", "\_id" : "0" }}  
> '.$j.'';  
> $baseUri = 'http://' . $search\_host . ':' . $search\_port . '/\_bulk';  
> $ci = curl\_init();  
> curl\_setopt($ci, CURLOPT\_URL, $baseUri);  
> curl\_setopt($ci, CURLOPT\_PORT, $search\_port);  
> curl\_setopt($ci, CURLOPT\_TIMEOUT, 200);  
> curl\_setopt($ci, CURLOPT\_RETURNTRANSFER, 1);  
> curl\_setopt($ci, CURLOPT\_FORBID\_REUSE, 0);  
> curl\_setopt($ci, CURLOPT\_CUSTOMREQUEST, 'PUT');  
> curl\_setopt($ci, CURLOPT\_POSTFIELDS, $json\_doc);  
> curl\_exec($ci);  
> curl\_close($ci);

---

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [December 9, 2015, 3:58pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/5 "2015-12-09T15:58:43Z")

</div>

Thanks Ryodo,

But how to run this code ? Can't we just do directly the way it explained in the ES Documentation  
[https://www.elastic.co/guide/en/kibana/current/getting-started.html](https://www.elastic.co/guide/en/kibana/current/getting-started.html).

I am just struggling to tell ES the path of json file

---

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [December 9, 2015, 4:07pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/6 "2015-12-09T16:07:16Z")

</div>

@David

I Edited my question .

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 9, 2015, 4:19pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/7 "2015-12-09T16:19:11Z")

</div>

Are you doing that from SENSE? If so it won't work.

---

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [December 9, 2015, 4:20pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/8 "2015-12-09T16:20:47Z")

</div>

yes I am doing it from SENSE , is there any other way to do this ?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 9, 2015, 4:52pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/9 "2015-12-09T16:52:06Z")

</div>

You can not use curl specific parameters in SENSE.

You can copy and paste the lines of your bulk file just after the `_bulk` command.  
Or you can use `curl` on the command line.

---

<div class="post-metadata">

**Author:** ![Mag\_Carl](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@Mag\_Carl](https://discuss.elastic.co/u/Mag_Carl)\
**Post date:** [April 8, 2016, 9:53am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/10 "2016-04-08T09:53:34Z")

</div>

HI Vikas  
Can you please explain me how you got around the issue. Im doing same tutotrial..shakespear...and im am getting same error with Sense

---

<div class="post-metadata">

**Author:** ![vikas\_gopal](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vikas_gopal/32/47661_2.png) [@vikas\_gopal](https://discuss.elastic.co/u/vikas_gopal)\
**Post date:** [April 18, 2016, 12:09pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/11 "2016-04-18T12:09:20Z")

</div>

@Mag_Carl, So as David suggested I used Curl rather Sense to fire bulk API.

---

<div class="post-metadata">

**Author:** ![maxxx](https://avatars.discourse-cdn.com/v4/letter/m/c77e96/32.png) [@maxxx](https://discuss.elastic.co/u/maxxx)\
**Post date:** [November 10, 2016, 9:50am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/12 "2016-11-10T09:50:00Z")

</div>

## {"index":{"\_id":"58242012e1bc2218ea17f19d"}} {"Vertical\_id":32, "Vertical\_Name":"Ad Servers","Tech\_ID":6603, "Title":"Smart AdServer (Ad Servers)", "Technology\_Name":"Smart AdServer", "Patterns":{ "Type":"File","Pattern":"[cdn1.smartadserver.com/diff,smartadserver.com/call\n](http://cdn1.smartadserver.com/diff,smartadserver.com/call%5Cn)", "text\_content":"[http://cdn1.smartadserver.com/diff/js/smartadserver.js](http://cdn1.smartadserver.com/diff/js/smartadserver.js)"\u003e\u003c/script\u003e /javascript", src="[http://ww619.smartadserver.com/call/pubj/32872/(home)/13955/m/799](http://ww619.smartadserver.com/call/pubj/32872/(home)/13955/m/799)""} }}

i have this type of document, and i am using bulk api like this  
curl -XPOST 'localhost:9200/test/test\_tech/\_bulk?pretty' --data-binary '@filename.json'  
and got error  
Warning: Couldn't read data from file "filename.json", this makes  
Warning: an empty POST.  
{  
"error" : {  
"root\_cause" : [ {  
"type" : "parse\_exception",  
"reason" : "Failed to derive xcontent"  
} ],  
"type" : "parse\_exception",  
"reason" : "Failed to derive xcontent"  
},  
"status" : 400  
}

* * *

i think problem here is in my "text\_content" field,because it contains so many type of character .so how i load data in ES?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [November 10, 2016, 10:21am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/13 "2016-11-10T10:21:10Z")

</div>

The body part must be on a single line. I think this is your issue here.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [November 10, 2016, 10:22am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/14 "2016-11-10T10:22:29Z")

</div>

Also you have another problem with CURL. May be running on Windows?  
Whatever, have a look at curl documentation to see how to pass a document. Otherwise, switch to SENSE / CONSOLE in Kibana which is easier to use.

---

<div class="post-metadata">

**Author:** ![maxxx](https://avatars.discourse-cdn.com/v4/letter/m/c77e96/32.png) [@maxxx](https://discuss.elastic.co/u/maxxx)\
**Post date:** [November 10, 2016, 10:43am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/15 "2016-11-10T10:43:37Z")

</div>

Hi dadoonet,  
curl command is running good with other json file...i think problem here is to how to capture the "text\_content" field text to form right json format..can you please help me for that?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [November 10, 2016, 10:59am UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/16 "2016-11-10T10:59:07Z")

</div>

If your JSON document looks exactly like what you pasted, I doubt you can index it for [this reason](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/13?u=dadoonet).

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 10:05pm UTC](https://discuss.elastic.co/t/how-to-insert-data-from-a-json-file-using-bulk-api-in-es2-1/36758/17 "2017-07-05T22:05:58Z")

</div>


