Can’t print Yoast meta description into page template (syntax error, unexpected ‘.’) [closed]

There is indeed an unwanted ; (semicolon) in your function (try to look at line 99 in the twentytwentyone-child/functions.php file) which likely is the cause to the syntax error. So just remove that ; and the error would be gone:

function my_service_template_footer_data() {
    echo "<script type="application/ld+json">
{
    '@context': 'https://schema.org/',
    '@type': 'Service',
    'serviceType': ' " . get_the_title() . " ',
    'description': ' " . $yoast_meta; . " ', // remove the ;
    ...

But that variable is not actually defined or that it is out of scope in my_service_template_footer_data(), so you should move/copy the variable into that function, and use get_the_ID() instead of $post->ID, like so:

function my_service_template_footer_data() {
    $yoast_meta = get_post_meta( get_the_ID(), '_yoast_wpseo_metadesc', true );
    ...

However, your JSON data is not in the valid format, e.g. property names should be wrapped in double quotes, so for example you would use "description" instead of 'description'. Also, you must properly escape the property values which can be done via the wp_json_encode() function (an enhanced version of the native json_encode() function in PHP).

So having said that, try this which uses the ?>HTML here<?php syntax and not echo 'HTML here':

Update: The above JSON-encoding functions will enclose the return value in double quotes, so don’t do "<?php echo wp_json_encode( ... ); ?>", i.e. do not include the quotes (").

function my_service_template_footer_data() {
    $yoast_meta = get_post_meta( get_the_ID(), '_yoast_wpseo_metadesc', true );
    ?>
<script type="application/ld+json">
{
    "@context": "https://schema.org/",
    "@type": "Service",
    "serviceType": <?php echo wp_json_encode( get_the_title() ); ?>,
    "description": <?php echo wp_json_encode( $yoast_meta ); ?>,
    "provider": {
        "@type": "LocalBusiness",
        "name": "...",
        "address": {
            "@type": "PostalAddress",
            "addressLocality": "...",
            "addressRegion": "...",
            "postalCode": "...",
            "streetAddress": "..."
        },
        "providerMobility":"...",
        "telephone": "...",
        "image": "...",
        "PriceRange": "...",
        "serviceArea": [{
            "@type": "...",
            "name": "...",
            "@id": "..."
        }]
    }
}
</script>
    <?php
}

PS: If get_the_ID() isn’t giving you the correct ID, try using get_queried_object_id() instead, and then use get_the_title( get_queried_object() ). ( And you can validate your structured data here.. 🙂 )