android 怎样将数据以json格式保存在手机文件中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 怎样将数据以json格式保存在手机文件中?相关的知识,希望对你有一定的参考价值。
json是一种轻量级数据交换格式,可以包含对象和数组,以下是一个json字符串的示例:"key":["key1":"value1","key2":value2",...]
json只是一种数据交换格式,并不是存储格式,所以只要你正确地组织好json字符串后,跟其他文件是一样存储的;
同时建议你,如果你存储的数据量比较多的话,建议存储在android系统自带的SQLite数据库中,这样操作起数据来更方便简单;如果数据量非常少,只有三五个字段存储,那样使用android的SharedPreferences可能会是更好的选择,希望你根据应用需求适当选用。 参考技术A 1、获取数据流
2、将json对象转换为json字符串
3、将转换到的字符串写入文件
4、保存文件即可 参考技术B 访问手机卡,可以随意保存,在.xml中申请权限。
以 JSON 格式创建和检索数据
【中文标题】以 JSON 格式创建和检索数据【英文标题】:Creating and retrieving data in JSON format 【发布时间】:2022-01-21 03:44:36 【问题描述】:我正在制作一个允许您赌博的程序,它会创建一个玩家对象,其属性包括当前资金、玩家的赢/输次数等。
我目前能够让这个工作并且在程序运行时保存信息,但是我想实现一个功能,允许我将这个用户信息保存在 json 中,然后下次运行程序时,检查该 json 以查看玩家输入的名称是否与 json 中“name”的任何值匹配,并从他们上次玩时提取他们的个人资料。
目前我正在学习如何读取/写入 json 数据,并且我能够将数据保存到 json,但我无法以我想要的格式保存它并稍后检索它并将数据转换回我的对象具有属性.. 具体来说,我可以像这样保存用户:
import json
class Casino:
def __init__(self, name, money, wins, debt):
self.name = str(name)
self.money = int(money)
self.wins = int(wins)
self.debt = int(debt)
self.is_gambling = True
self.losses = 0
def add_win(self):
self.wins = self.wins + 1
def add_loss(self):
self.losses = self.losses + 1
def add_money(self, bet: int):
self.money = self.money + bet
def add_debt(self, debt: int):
if self.money == 0:
print("You have gone into debt..")
print("Your debt has gone up")
self.debt = self.debt + debt
else:
print("Your debt has gone up")
self.debt = self.debt + debt
def change_name(self, newname):
self.name = newname
return self.name
def indebt(self):
if self.debt > 0:
print('You are in debt..')
print(f'You owe $self.debt')
else:
print('You are not in debt')
def addrep(self, rep: int):
self.reputation = self.reputation + rep
return self.reputation
def remrep(self, rep: int):
self.reputation = self.reputation - rep
return self.reputation
player2 =
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
show = json.dumps(player2)
with open('test.json', 'w') as userfile:
json.dump(show, userfile)
它会像这样保存到 json 中:
"\"name\": \"dolorean\", \"money\": 0, \"wins\": 0, \"debt\": 0"
但我想通过用户名检索属性。
我需要在 json 中创建某种嵌套列表吗?如果我这样做,我该怎么做?我尝试从以下位置更改我的播放器变量:
player2 =
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
到:
player2 =
'users':
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
但我不确定如何检索数据,所以它只是以一种对我来说看起来不同的方式保存它..
【问题讨论】:
您应该将数据保存为一个list
的播放器 JSON 对象(即 Python dict
s)。这将允许有同名的玩家(与@John Gordon 的回答中建议的使用字典的情况不同)。
好吧,让我试试这个想法。我将查找如何将列表保存到 json。
您的操作与保存字典相同。即json.dumps(player_list)
。另请注意,您必须重新编写整个文件以保存对其内容所做的任何更新。
【参考方案1】:
好的,所以我从 martineau 的评论中得到的解决方案是这样做:
我将使用输入函数生成一个名称(只是临时的,我将其添加到一个不和谐的机器人中,因此最终名称将是他们的服务器显示名称,他们的文件名将是他们唯一的服务器 ID,因此我可以保存他们的信息到他们的文件),然后我从该输入中创建以下对象并将其转换为 json 格式,然后将其转换回来。
gam_name = str(input('What is your name?'))
player1 = Casino(gam_name, 500, 0, 0)
player1 =
'name': gam_name,
'money': player1.money,
'wins': player1.wins,
'debt': player1.debt
with open(gam_name + '.json', 'w') as userfile:
json.dump(player1, userfile)
with open(gam_name + '.json') as userfile:
info = json.load(userfile)
print(info['name'])
print(info['money'])
print(info['wins'])
print(info['debt'])
现在通过这种方式,我可以将每个值保存到当前的任何值,并且我可以运行它,无论何时他们赢或输,它都会用新的值覆盖他们当前的值,然后在完成后使用 with 语句关闭文件.
这正是我想要做的,现在我可以从特定于播放器的唯一文件中调用信息,这将允许两个人拥有相同的显示名称或用户名和不同的信息。
感谢您的帮助!
【讨论】:
【参考方案2】:此数据结构将允许许多不同的玩家名称:
"jim": "money": 100, "wins": 5, "debt": 0,
"betty": "money": 200, "wins": 7, "debt": 5
【讨论】:
以上是关于android 怎样将数据以json格式保存在手机文件中?的主要内容,如果未能解决你的问题,请参考以下文章