hyperledger/fabric · error
no object open, cannot add field
Error message
no object open, cannot add field
What it means
AddField appends key/value pairs to the currently open JSON object. Fields may only exist inside an object, so when objectOpened is false the writer refuses to emit a field that would produce invalid JSON.
Source
Thrown at internal/ledgerutil/jsonrw/json_read_write.go:111
return errors.Errorf("no object open, cannot close object")
}
_, err := w.buffer.Write([]byte("}\n"))
if err != nil {
return err
}
w.objectOpened = false
w.firstFieldWritten = false
return nil
}
// Add field to an open json object
func (w *JSONFileWriter) AddField(k string, v any) error {
// Need to open object before adding fields
if !w.objectOpened {
return errors.Errorf("no object open, cannot add field")
}
// Add commas for fields after the first field in the object
if w.firstFieldWritten {
_, err := w.buffer.Write([]byte(",\n"))
if err != nil {
return err
}
} else {
w.firstFieldWritten = true
}
// Key : Value
keyString := fmt.Sprintf("\"%s\":", k)
_, err := w.buffer.Write([]byte(keyString))
if err != nil {
return err
}
// Determine if v is list
if reflect.TypeOf(v).Kind() == reflect.Slice {View on GitHub (pinned to 2736b63f8f)
Solutions
- Wrap AddField calls between OpenObject and CloseObject
- Move AddField calls inside the object-open region
- For top-level data, open a single object for the whole file first
Example fix
// before
w.AddField("count", 1) // errors: no object open
// after
w.OpenObject()
w.AddField("count", 1)
w.CloseObject() Defensive patterns
Strategy: validation
Validate before calling
func requireObjectOpen(opened bool) error {
if !opened { return errors.New("AddField requires an open object: call OpenObject first") }
return nil
} Type guard
func canAddField(objectOpened bool) bool { return objectOpened } Try / catch
if err := w.OpenObject(); err != nil { return err }
if err := w.AddField("key", val); err != nil { return err }
if err := w.CloseObject(); err != nil { return err } Prevention
- Always open an object before the first AddField in a file
- Keep AddField calls inside the OpenObject/CloseObject pair visually adjacent
- Remember the top level of the file is not an implicit object
When it happens
Trigger: Calling AddField before any OpenObject, or after CloseObject has already closed the current object.
Common situations: Writing a flat sequence of fields at top level (top level of the file is not an implicit object), or adding fields after closing an object in a loop.
Related errors
- object already open, must close object before starting a new
- no object open, cannot close object
- list already open, must close list before starting a new one
- no list open, cannot close list
- no list open, cannot add entries
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/d09bab496c2f387e.
Report an issue: GitHub.