Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 正确验证TypeScript中的JSON.parsed数据_Angular_Typescript_If Statement_Conditional Statements_Javascript Objects - Fatal编程技术网

Angular 正确验证TypeScript中的JSON.parsed数据

Angular 正确验证TypeScript中的JSON.parsed数据,angular,typescript,if-statement,conditional-statements,javascript-objects,Angular,Typescript,If Statement,Conditional Statements,Javascript Objects,我正在为angular创建一个小模块,但我遇到了一个问题,即检查JSON.parsed数据是否正确 read(): Position|null { try { ... let parsedData = JSON.parse(data); if (parsedData && parsedData.x && parsedData.y) return new Position(parsed

我正在为angular创建一个小模块,但我遇到了一个问题,即检查JSON.parsed数据是否正确

read(): Position|null {
    try {
        ...
        let parsedData  = JSON.parse(data);
        if (parsedData && parsedData.x && parsedData.y)
            return new Position(parsedData.x, parsedData.y);
    } catch (e) {
        ...
    }
    return null;
}
对我来说,这似乎不是一个很好的解决方案,因为如果我之前字符串化的对象中有更多属性,那么我需要检查它们中的每一个。我也不确定解析数据为
null
时会发生什么。是否有其他解决方案来检查已提交的数据?谢谢免责声明:以下代码不执行任何验证。此响应是根据OP的要求添加的

如评论中所述,您需要的是:

read(): Position|null {
    try {
        return JSON.parse(data) as Position;
    } catch (e) {
        return null;
    }
}

这似乎是一个非常合理的解决方案。你到底担心什么?如果您正在解析的JSON有其他字段,则不会影响上面编写的逻辑。您将解析包装在一个try-catch中,它还应该处理任何格式错误的JSON情况。如果我需要更改对象,并期望从解析的对象中获得更多属性,那么我需要检查是否设置了每个属性。我在考虑检查已解析数据的实例,但它可能不会像我对Position对象进行字符串化,然后将其解析回Position对象时那样工作。它不再是Position的实例了,对吗?如果您的json字符串已经是序列化的Position对象,您真的不需要进行任何检查。您可以将JSON.parse(数据)作为position返回,这就是我想要的,谢谢。也许你应该考虑把它包装起来,然后回答这个问题,这样我就可以把它标记为正确的。再次感谢。这个问题是关于验证的。这个答案根本没有提供任何验证。这是正确的。我相信OP说他会在类型转换后进行检查,但不确定如何在不需要使用“new”实例化的情况下将泛型对象转换为Position类型。他明确要求我补充这一点作为这个问题的解决方案。根据讨论,这是正确的,但这并不能公正地对待标题和问题。请记住,SO还应作为访问者的知识库。一个好的解决方案是更新答案或使其更一般化。