extractJsonLd method

List<StructuredDataExtractionResult> extractJsonLd(
  1. String html
)

Extracts JSON-LD data from HTML

Implementation

List<StructuredDataExtractionResult> extractJsonLd(String html) {
  final results = <StructuredDataExtractionResult>[];
  final document = html_parser.parse(html);

  try {
    // Find all script tags with type="application/ld+json"
    final scriptElements = document.querySelectorAll(
      'script[type="application/ld+json"]',
    );

    for (final scriptElement in scriptElements) {
      final jsonLdText = scriptElement.text.trim();
      if (jsonLdText.isEmpty) continue;

      try {
        // Parse JSON
        final dynamic jsonData = json.decode(jsonLdText);

        // Handle both single objects and arrays of objects
        if (jsonData is List) {
          for (final item in jsonData) {
            if (item is Map<String, dynamic>) {
              results.add(
                StructuredDataExtractionResult(
                  type: StructuredDataType.jsonLd,
                  data: item,
                  rawData: jsonLdText,
                ),
              );
            }
          }
        } else if (jsonData is Map<String, dynamic>) {
          results.add(
            StructuredDataExtractionResult(
              type: StructuredDataType.jsonLd,
              data: jsonData,
              rawData: jsonLdText,
            ),
          );
        }
      } catch (e) {
        logger?.warning('Error parsing JSON-LD: $e');
      }
    }

    logger?.info('Extracted ${results.length} JSON-LD items');
  } catch (e) {
    logger?.error('Error extracting JSON-LD: $e');
  }

  return results;
}