From JSON file to Numpy Array
<p>I have a MongoDB collection, which, when imported to Python via PyMongo, is a dictionnary in Python.
I am looking to transform it into a Numpy Array.</p>

<p>For instance, if the JSON file looks like this :</p>

<pre><code>{
    "_id" : ObjectId("57065024c3d1132426c4dd53"),

    "B" : {
        "BA" : 14,
        "BB" : 23,
        "BC" : 32,
        "BD" : 41
    "A" : 50,
}
{
    "_id" : ObjectId("57065024c3d1132426c4dd53"),
    "A" : 1
    "B" : {
        "BA" : 1,
        "BB" : 2,
        "BC" : 3,
        "BD" : 4
</code></pre>

<p>}</p>

<p>I'd like to get in return this 5*2 Numpy Array :
    np.array([[50,14,23,32,41],
    [1,1,2,3,4]])
In that case, the first column corresponds to "A", the second one to "BA", the third one to "BB", etc.
Notice that keys are not always sorted in the same order.</p>

<p>My code, which does not work at all (and does not do what I want yet) looks like this :</p>

<pre><code>from pymongo import MongoClient
uri = "mongodb://localhost/test"
client = MongoClient(uri)
db=client.recodb
collection=db.recos

list1=list(collection.find())
array2=np.vstack([[product[key] for key in product.keys()] for product in list1])
</code></pre>

<p>The <a href="https://pypi.python.org/pypi/flatdict" rel="nofollow">flatdict</a> module can sometimes be useful when working with mongodb data structures. It will handle flattening the nested dictionary structure for you:</p>

<pre><code>columns = []
for d in data:
    flat = flatdict.FlatDict(d)
    del flat['_id']
    columns.append([item[1] for item in sorted(flat.items(), key=lambda item: item[0])])
np.vstack(columns)
</code></pre>

<p>Of course this can be solved without flatdict too.</p>

python arrays json mongodb numpy