diff --git a/pyiceberg/conversions.py b/pyiceberg/conversions.py
index b9b05a0..7bf7b46 100644
--- a/pyiceberg/conversions.py
+++ b/pyiceberg/conversions.py
@@ -563,14 +563,12 @@
 def _(t: FixedType, val: Union[str, bytes]) -> bytes:
     """JSON hexadecimal encoded string into bytes."""
     if isinstance(val, str):
-        b = codecs.decode(val.encode(UTF8), "hex")
+        val = codecs.decode(val.encode(UTF8), "hex")
 
-        if len(t) != len(b):
-            raise ValueError(f"FixedType has length {len(t)}, which is different from the value: {len(b)}")
+    if len(t) != len(val):
+        raise ValueError(f"FixedType has length {len(t)}, which is different from the value: {len(val)}")
 
-        return b
-    else:
-        return val
+    return val
 
 
 @from_json.register(BinaryType)
diff --git a/tests/integration/test_rest_schema.py b/tests/integration/test_rest_schema.py
index f8ae993..4462da1 100644
--- a/tests/integration/test_rest_schema.py
+++ b/tests/integration/test_rest_schema.py
@@ -1095,7 +1095,7 @@
 
 @pytest.mark.integration
 @pytest.mark.parametrize(
-    "iceberg_type, default_value, write_default",
+    "iceberg_type, initial_default, write_default",
     [
         (BooleanType(), True, False),
         (IntegerType(), 123, 456),
@@ -1119,25 +1119,33 @@
     ],
 )
 def test_initial_default_all_columns(
-    catalog: Catalog, iceberg_type: PrimitiveType, default_value: Any, write_default: Any
+    catalog: Catalog, iceberg_type: PrimitiveType, initial_default: Any, write_default: Any
 ) -> None:
     # Round trips all the types through the rest catalog to check the serialization
     table = _create_table_with_schema(catalog, Schema(), properties={TableProperties.FORMAT_VERSION: 3})
 
     tx = table.update_schema()
-    tx.add_column(path="data", field_type=iceberg_type, required=True, default_value=default_value)
+    tx.add_column(path="data", field_type=iceberg_type, required=True, default_value=initial_default)
+    tx.add_column(path="nested", field_type=StructType(), required=False)
     tx.commit()
 
-    field = table.schema().find_field(1)
-    assert field.initial_default == default_value
-    assert field.write_default == default_value
+    tx = table.update_schema()
+    tx.add_column(path=("nested", "data"), field_type=iceberg_type, required=True, default_value=initial_default)
+    tx.commit()
+
+    for field_id in [1, 3]:
+        field = table.schema().find_field(field_id)
+        assert field.initial_default == initial_default
+        assert field.write_default == initial_default
 
     with table.update_schema() as tx:
         tx.set_default_value("data", write_default)
+        tx.set_default_value(("nested", "data"), write_default)
 
-    field = table.schema().find_field(1)
-    assert field.initial_default == default_value
-    assert field.write_default == write_default
+    for field_id in [1, 3]:
+        field = table.schema().find_field(field_id)
+        assert field.initial_default == initial_default
+        assert field.write_default == write_default
 
 
 @pytest.mark.integration
