Yes, it is normal… the “dast” specification is willingly simple and always wraps text content of list items inside paragraphs.
If you want to get rid of them (ie. if the list item only has one paragraph), you can do that on your frontend with custom render rules:
<StructuredText
data={content}
customNodeRules={[
renderNodeRule(isParagraph, ({ children, key, ancestors }) => {
if (
ancestors[0].type === 'listItem' &&
ancestors[0].children.length === 1
) {
return <React.Fragment key={key}>{children}</React.Fragment>;
}
return <p key={key}>{children}</p>;
}),
]}
/>