问题描述
有没有办法将下面的字符串转换为列表? 扫描二维码后检索此字符串。
CashRequest{
orderid='0',
user_id='nvHt2U5RnqUwXB4ZK37Zn1DXPV82',
userName='username',
userEmail='whateveremailthisis@email.blabla',
fullName='full name',
phoneNumber=0,
totalCash='$304.00',
totalRV='$34.00',
foods=[
Order{
userID='nvHt2U5RnqUwXB4ZK37Zn1DXPV82',
ProductID='-LMDiT7klgoXU8bQEM-4',
ProductName='Coke',
Quantity='4',
Price='1',
RedemptionPrice='10',
RedemptionValue='1'},
Order{
userID='nvHt2U5RnqUwXB4ZK37Zn1DXPV82',
ProductID='1000',
ProductName='Kunau Ring Ring Pradu',
Quantity='3',
Price='100',
RedemptionPrice='10',
RedemptionValue='10'
}
]
}
所需的输出是将其存储在 firebase 实时数据库中,如下所示:
1楼
那么你有几个选择。 由于它是值之间的换行符,您可以使用简单的换行符读取并比较它是否以“您正在寻找的保留字”开头,然后是从那里开始的子字符串,但这可能会变得混乱和大量膨胀代码。
最简单的方法是先进行已知的替换。 制作一个方法,用引号包围的 json 键替换所有坏的 json 键,例如:
val myJsonCorrected = yourStringAbove.replace("Order", "\"Order"\")
对所有已知实体重复,直到将其转换为有效的 json。 单个刻度对值来说很好,但键也需要引号。
然后简单地创建一个与 json 格式匹配的对象。
class CashRequestModel{
@SerializableName("orderid")
var orderID: Int? = null
etc.....
@SerializableName("foods")
var myFoods: ArrayList<OrderModel>? = null
}
class OrderMode {
@SerializableName("userID")
var userID: String? = null
@SerializableName("ProductID")
var userID: String? = null
etc..
}
然后只需将其转换为 JSON
val cashRequest = getGson().fromJson(cleanedUpJson, classTypeForCashRequest);
和你的完成。 现在只需使用列表。 当然,如果您无需先清理即可获得有效的 JSON 会更好,但看起来键是已知的,并且您可以轻松地编写字符串替换代码以修复错误的 json,然后再将其转换为与结构匹配的对象。
希望有帮助。