I think it should be simple, but could not find correct way ore related document then hope to know way.

Now I have active armature as "amt" , and it have many ID properties for shape keys and drive some bones. eg amt["prop1"] = 1.0, amt["prop2"] = 0.2 etc,,

by bpy, I can get amt ID property keys and values of current frame, which I only need to export, as python dictionary.

eg preset = {"prop1":1.0, "prop3" :0.2,,,}

Now I hope to export the dictionary as json, then import the saved json , and apply these ID property values for current active armature, when I need. (of course it have same ID property keys) (I prefer to export as json,,)

  • 1
    $\begingroup$ You might want to change the word ID to Key since in Python, ID is a unique special thing which is different from dictionary key in general. $\endgroup$ – HikariTW May 11 '19 at 9:28

This code get some data from Blender scene, save them as Python dict and write a JSON file. Then read that file and uses the inner data:

import bpy
import json
import os

# 1 - Export data as JSON file

# dict with all your data
dict = {
    "name": "Cube 1",
    "material": "Cube MAT"

# encode dict as JSON 
data = json.dumps(dict, indent=1, ensure_ascii=True)

# set output path and file name (set your own)
save_path = 'E:\\'
file_name = os.path.join(save_path, "export_data.json")

# write JSON file
with open(file_name, 'w') as outfile:
    outfile.write(data + '\n')

# 2 - Import data from JSON file

# read JSON file
with open(file_name, 'r') as fp:
    data_file = json.load(fp)

# get data
cube_name = data_file['name']
cube_material = data_file['material']

print(cube_name + ', ' + cube_material)
  • $\begingroup$ Can you give an explanation of why use json.dumps() instead of json.dump()? I know the later is seldom used in practice, but still don't know why. $\endgroup$ – HikariTW May 11 '19 at 9:55
  • $\begingroup$ J.Aron Really thanks , it is what I need I think. I am now edit blender python template with compare your answer for json. and I use ID properties of armature obj, not use bpy.props, then your answer much for my question. $\endgroup$ – tokikake May 11 '19 at 13:45

As you said, use json module: Reference

You will need to handle the conversion between properties and Dictionary by yourself, maybe two bpy.type.Operator with a PropertiesGroup.

And load/save the dictionary by json.dump() and json.load()


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.