extractJsonLd method
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;
}