Javascript 如何修复';无法将java.lang.String类型的值转换为JSONObject';React Native中的mergeitem出错
我想用mergeItem方法更新AsyncStorage中的名称值。我将密钥(时间戳)传递给该特定项的函数 但是我不能存储字符串的值。AsyncStorage仅由作为值(作为字符串)的名称和作为键的时间戳组成Javascript 如何修复';无法将java.lang.String类型的值转换为JSONObject';React Native中的mergeitem出错,javascript,react-native,Javascript,React Native,我想用mergeItem方法更新AsyncStorage中的名称值。我将密钥(时间戳)传递给该特定项的函数 但是我不能存储字符串的值。AsyncStorage仅由作为值(作为字符串)的名称和作为键的时间戳组成 updateName = async(key) => { if (this.state.name !== '') { await AsyncStorage.mergeItem(key, JSON.stringify(th
updateName = async(key) => {
if (this.state.name !== '') {
await AsyncStorage.mergeItem(key, JSON.stringify(this.state.name))
.then( () => {
this.props.navigation.goBack();
} )
.catch(error => console.log(error))
}
}
下面是调用函数updateName
Value a of type java.lang.String cannot be converted to JSONObject
- node_modules\react-native\Libraries\Storage\AsyncStorage.js:347:24 in convertError
- node_modules\react-native\Libraries\Storage\AsyncStorage.js:119:35 in <unknown>
- ... 5 more stack frames from framework internals
无法将java.lang.String类型的值转换为JSONObject
-convertError中的节点\u modules\react native\Libraries\Storage\AsyncStorage.js:347:24
-中的节点\u modules\react native\Libraries\Storage\AsyncStorage.js:119:35
- ... 框架内部再增加5个堆叠框架
JSON.stringify()需要有效的JSON才能转换为字符串,如:
var obj = { name: "John", age: 30, city: "New York" }; // correct json
var myJSON = JSON.stringify(obj);
var name = "Test" // incorrect json
var myJSON = JSON.stringify(name); // will through exception
根据“合并现有键值和输入值,假设两个值都是字符串化的JSON。返回承诺对象。”
如果必须只保存字符串,则不应在“AsyncStorage.setItem”之后调用合并字符串。您必须调用“AsyncStorage.setItem”来重置字符串
如果要保存每个时间戳的值,可以使用“mergeItem”
示例代码
const nameObject = {
[Date.now().toString()]: "Chris"
};
await AsyncStorage.mergeItem("NAMES", JSON.stringify(nameObject));
const getNames = await AsyncStorage.getItem("NAMES");
console.log("getNames", getNames);
const nameObject2 = {
[Date.now().toString()]: "Harry"
};
await AsyncStorage.mergeItem("NAMES", JSON.stringify(nameObject2));
const getNamesAfterUpdate = await AsyncStorage.getItem("NAMES");
console.log("getNamesAfterUpdate", getNamesAfterUpdate);
输出
此.state.name的
值是多少。你确定它有正确的JSON格式吗?我只是一个使用AsyncStorage.setItem(Date.now().toString(),this.state.name)的字符串。日期是键,名称只是一个字符串。您可以记录名称和键吗。因为它是合并到一个对象中的,所以我可以假设合并后的对象不是有效的JSON,所以无法转换。是的,我可以记录名称和键,它看起来是字符串。另外,typeof(name)表示它是字符串。非常感谢。现在我明白了事情是如何运作的。非常感谢。