diff --git a/CHANGELOG.md b/CHANGELOG.md
index a78e315..2fd0245 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ Change Log
 * Upgraded to Python 3. [#18](https://github.com/unt-libraries/pyuntl/issues/18)
 * Removed automatic addition of trailing period for LCSH. [#39](https://github.com/unt-libraries/pyuntl/issues/39)
 * Removed etd_ms support which is not used by pyuntl. [#29](https://github.com/unt-libraries/pyuntl/issues/29)
+* Added make_hidden, make_unhidden, is_hidden methods. [#37](https://github.com/unt-libraries/pyuntl/issues/37)
+* Added support for JSON serializations. [#38](https://github.com/unt-libraries/pyuntl/issues/38)
 
 
 1.0.2
diff --git a/pyuntl/untldoc.py b/pyuntl/untldoc.py
index 6ead22f..827b07e 100644
--- a/pyuntl/untldoc.py
+++ b/pyuntl/untldoc.py
@@ -249,6 +249,12 @@ def generate_untl_json(untl_elements, json_indent=4):
     return json.dumps(untl_dict, sort_keys=True, indent=json_indent)
 
 
+def untljson2py(untl_json):
+    """Convert UNTL JSON into a Python object."""
+    untl_dict = json.loads(untl_json)
+    return untldict2py(untl_dict)
+
+
 def untlpy2dcpy(untl_elements, **kwargs):
     """Convert the UNTL elements structure into a DC structure.
 

Add Json to pyuntl format
As a followup to #38,  we also want a function that takes untl json and converts it back to untl py object format.
diff --git a/tests/untldoc_test.py b/tests/untldoc_test.py
index dd326f8..bf4e965 100644
--- a/tests/untldoc_test.py
+++ b/tests/untldoc_test.py
@@ -133,6 +133,15 @@ def test_generate_untl_json(input_indent, json_output):
     assert untl_json == json_output
 
 
+def test_untljson2py():
+    untl_py = untldoc.untljson2py(
+        '{"title": [{"content": "The Bronco", "qualifier": "serialtitle"}]}')
+    assert untl_py.children[0].tag == 'title'
+    assert untl_py.children[0].content == 'The Bronco'
+    assert untl_py.children[0].qualifier == 'serialtitle'
+    assert untl_py.tag == 'metadata'
+
+
 def test_untlpydict2xml(tmpdir):
     xml_file = os.path.join(tmpdir, 'untl.xml')
     returned_value = untldoc.untlpydict2xml(xml_file, UNTL_DICTIONARY)

pip install -e .
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
isodate==0.6.1
lxml==5.3.1
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing==3.1.4
pytest==7.1.2
-e git+https://github.com/unt-libraries/pyuntl.git@c4d2df419a8a074957fc7434dab67f85dc4da6bc#egg=pyuntl
rdflib==6.3.2
six==1.17.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: pyuntl
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - isodate==0.6.1
      - lxml==5.3.1
      - pyparsing==3.1.4
      - rdflib==6.3.2
      - six==1.17.0
prefix: /opt/conda/envs/pyuntl

tests/untldoc_test.py::test_untljson2py
tests/untldoc_test.py::test_generate_rdf_xml
tests/untldoc_test.py::test_PyuntlException tests/untldoc_test.py::test_untlxml2py tests/untldoc_test.py::test_untlxml2py_namespace tests/untldoc_test.py::test_untlxml2py_non_UNTL_tag_raises_exception tests/untldoc_test.py::test_untlxml2pydict tests/untldoc_test.py::test_untlpy2dict tests/untldoc_test.py::test_generate_untl_json[4-{\n tests/untldoc_test.py::test_generate_untl_json[None-{"title": tests/untldoc_test.py::test_untlpydict2xml tests/untldoc_test.py::test_untlpydict2xmlstring tests/untldoc_test.py::test_untldict2py tests/untldoc_test.py::test_untldict2py_dict_includes_qualifier_only_element tests/untldoc_test.py::test_post2pydict tests/untldoc_test.py::test_post2pydict_PyuntlException tests/untldoc_test.py::test_untlpy2dcpy tests/untldoc_test.py::test_untlpy2dcpy_resolve_values_verbose_vocabularies tests/untldoc_test.py::test_untlpy2dcpy_resolve_values_retrieve_vocab tests/untldoc_test.py::test_untlpy2dcpy_resolve_urls tests/untldoc_test.py::test_untlpy2dcpy_add_permalink_and_ark tests/untldoc_test.py::test_untlpy2dcpy_only_sDate tests/untldoc_test.py::test_untlpy2dcpy_only_eDate tests/untldoc_test.py::test_untlpy2highwirepy tests/untldoc_test.py::test_untlpy2highwirepy_not_official_title tests/untldoc_test.py::test_untlpydict2dcformatteddict tests/untldoc_test.py::test_dcpy2formatteddcdict tests/untldoc_test.py::test_dcpy2dict tests/untldoc_test.py::test_formatted_dc_dict tests/untldoc_test.py::test_generate_dc_xml tests/untldoc_test.py::test_generate_dc_json tests/untldoc_test.py::test_generate_dc_txt tests/untldoc_test.py::test_highwirepy2dict tests/untldoc_test.py::test_generate_highwire_xml tests/untldoc_test.py::test_generate_highwire_json tests/untldoc_test.py::test_generate_highwire_text tests/untldoc_test.py::test_dcdict2rdfpy tests/untldoc_test.py::test_retrieve_vocab tests/untldoc_test.py::test_retrieve_vocab_getting_data_errors tests/untldoc_test.py::test_add_empty_fields tests/untldoc_test.py::test_add_empty_fields_raise_PyuntlException tests/untldoc_test.py::test_add_empty_fields_allows_content_no_qualifier_has_children tests/untldoc_test.py::test_add_empty_fields_allows_content_and_qualifier_has_children tests/untldoc_test.py::test_find_untl_errors tests/untldoc_test.py::test_find_untl_errors_fix_errors tests/untldoc_test.py::test_find_untl_errors_fix_errors_no_errors
CHANGELOG.md pyuntl/untldoc.py
CHANGELOG.md pyuntl/untldoc.py