Build a custom generator
6. Member block generator
This step will build the generator for the member block. It will use the function getFieldValue, and introduce the function valueToCode.
The member block has a text input field and a value input.

The generated code looks like "property name": "property value".
Field value
The property name is the value of the text input, which is fetched via getFieldValue:
const name = block.getFieldValue('MEMBER_NAME');
Recall: the name of the value being fetched is MEMBER_NAME because that is how it was defined in src/blocks/json.js.
Input value
The property value is whatever is attached to the value input. A variety of blocks could be attached there: logic_null, text, math_number, logic_boolean, or even an array (lists_create_with). Use valueToCode to get the correct value:
const value = generator.valueToCode(block, 'MEMBER_VALUE', Order.ATOMIC);
valueToCode does three things:
- Finds the blocks connected to the named value input (the second argument)
- Generates the code for that block
- Returns the code as a string
If no block is attached, valueToCode returns null. In another generator, valueToCode might need to replace null with a different default value; in JSON, null is fine.
The third argument is related to operator precedence. It is used to determine if parentheses need to be added around the value. In JSON, parentheses will never be added, as discussed in an earlier section.
Build the code string
Next, assemble the arguments name and value into the correct code, of the form "name": value.
const code = `"${name}": ${value}`;
Put it all together
All together, here is block generator for the member block:
jsonGenerator.forBlock['member'] = function (block, generator) {
const name = block.getFieldValue('MEMBER_NAME');
const value = generator.valueToCode(block, 'MEMBER_VALUE', Order.ATOMIC);
const code = `"${name}": ${value}`;
return code;
};