FeedMe Pro Import JSON
In addition to How to save Matrix data programmatically in Craft 3 

You'll fetch your data loop each row and fetch the element / create a new element if none exists

$section = Craft::$app-&gt;sections-&gt;getSectionByHandle('news');
$entryTypes = $section-&gt;getEntryTypes();
$entryType = reset($entryTypes);
foreach ($jsonData as $row) {
    // try to fetch an element
    $element = Craft::$app-&gt;getElements()-&gt;getElementById($row['id']);
    // no element exists, create a new one
    if ($element === null) {
        $element = new Entry(
            [
                'sectionId'     =&gt; $section-&gt;id,
                'typeId'        =&gt; $entryType-&gt;id,
                'fieldLayoutId' =&gt; $entryType-&gt;fieldLayoutId,
                'authorId'      =&gt; 1,
                'title'         =&gt; 'My Entry',
                'slug'          =&gt; 'my-entry',
                'postDate'      =&gt; new DateTime(),
            ]
        );
    }
    // get the field by handle
    /** @var \craft\fields\Matrix $field */
    $field = Craft::$app-&gt;getFields()-&gt;getFieldByHandle('matrix');

    // get the existing matrix blocks
    $existingMatrix = $element-&gt;getFieldValue('matrix');

    // serialize the data
    $serializedMatrix = $field-&gt;serializeValue($existingMatrix, $element);

   // loop your json matrix blocks
    foreach ($row['yourMatrixBlocks'] as $key =&gt; $block) {
        // append your new Matrix fields
        $serializedMatrix['new' . $key] = [
            'type'   =&gt; 'block',
            'fields' =&gt; [
                'field' =&gt; $block['field']
            ],
        ];
    }

    // set the new field value
    $element-&gt;setFieldValue('matrix', $serializedMatrix);
    $success = Craft::$app-&gt;getElements()-&gt;saveElement($element);

    // display errors - just in Case
    if($success === false){
        Craft::dd($element-&gt;getErrors());    
    }
}