如何使用 React-Native-fs 读取 JSON 文件

2024-04-26

我有一个包含内容的 asset.json 文件,需要在反应本机应用程序中读取它。 我已经认为它必须手动复制到本机实现,并且我可以验证文件是否存在(并且可读:-rw-r--r--)。 由于它在那里并且我正在使用承诺来获取它,请告诉我输出何时仍然:

{"_40":0,"_65":0,"_55":null,"_72":null}

而不是文件的内容。

const path = RNFetchBlob.fs.dirs.DocumentDir + '/' + ASSET_FILENAME;
  if (await RNFS.exists(path)){
    console.log("BLAH EXISTS");
  } else {
    console.log("BLAH DOES NOT EXIST");
  }
  const asset_content = await RNFS.readFile(path);
  console.log("local asset_content:", asset_content);
  const assets = JSON.parse(asset_content);
  console.log("local assets:", assets);

输出是:

[10:03:55] I | ReactNativeJS ▶︎ BLAH EXISTS

[10:03:55] I | ReactNativeJS ▶︎ 'local asset_content:', '{"_40":0,"_65":0,"_55":null,"_72":null}'

[10:03:55] I | ReactNativeJS ▶︎ 'local assets:', { _40: 0, _65: 0, _55: null, _72: null }

另一方面,如果我使用promisify无论出于何种原因,正如一些帖子中所建议的那样,应用程序在调用承诺的文件读取时冻结。 这里是应用了更改的代码:

 const path = RNFetchBlob.fs.dirs.DocumentDir + '/' + ASSET_FILENAME;
  if (await RNFS.exists(path)){
    console.log("BLAH EXISTS");
  } else {
    console.log("BLAH DOES NOT EXIST");
  }
  const readFileAsync = promisify(RNFS.readFile);
  const asset_content = await readFileAsync(path);
  console.log("local asset_content:", asset_content);
  const assets = JSON.parse(asset_content);
  console.log("local assets:", assets);

及其输出:

[10:24:16] I | ReactNativeJS ▶︎ BLAH EXISTS

文件不大,只有 81 行有效的 JSON。 现在,如果我使用承诺来检查是否有任何异常,如下所示:

  const path = RNFetchBlob.fs.dirs.DocumentDir + '/' + ASSET_FILENAME;
  if (await RNFS.exists(path)){
    console.log("BLAH EXISTS");
  } else {
    console.log("BLAH DOES NOT EXIST");
  }
  const readFileAsync = promisify(RNFS.readFile);
  let asset_content = null;
  readFileAsync(path, 'utf8')
    .then((str) => {
      console.log("got result: ", str);
      asset_content = str;
    })
    .catch((e) => {
      console.log("got error:", e);
    });
  console.log("local asset_content:", asset_content);
  const assets = JSON.parse(asset_content);
  console.log("local assets:", assets);

我仍然没有异常,结果为空:

[10:45:00] I | ReactNativeJS ▶︎ BLAH EXISTS

[10:45:00] I | ReactNativeJS ▶︎ 'local asset_content:', null

[10:45:00] I | ReactNativeJS ▶︎ 'local assets:', null

当我摆脱 Promisify 并离开 Promise 处理时,我又回到了开始的地方:

  const path = RNFetchBlob.fs.dirs.DocumentDir + '/' + ASSET_FILENAME;
  if (await RNFS.exists(path)){
    console.log("BLAH EXISTS");
  } else {
    console.log("BLAH DOES NOT EXIST");
  }
  let asset_content = null;
  RNFS.readFile(path, 'utf8')
    .then((str) => {
      console.log("got result: ", str);
      asset_content = str;
    })
    .catch((e) => {
      console.log("got error:", e);
    });
  console.log("local asset_content:", asset_content);
  const assets = JSON.parse(asset_content);
  console.log("local assets:", assets);

output:

[10:49:45] I | ReactNativeJS ▶︎ BLAH EXISTS

[10:49:45] I | ReactNativeJS ▶︎ 'local asset_content:', null

[10:49:45] I | ReactNativeJS ▶︎ 'local assets:', null

[10:49:45] I | ReactNativeJS ▶︎ 'got result: ', '{"_40":0,"_65":0,"_55":null,"_72":null}'

请帮忙。文件处理对于我们的应用程序至关重要。

更新: 以下是 ASSET_FILE 引用的 asset.json 文件的内容:

{
  "protobuf": [
    {
      "name": "tiny-fovapp-4c",
      "lite": false,
      "compressed": false,
      "selected": false
    },
    {
      "name": "tiny-yolo-4c-quantized",
      "lite": true,
      "compressed": true,
      "selected": false
    },
    {
      "name": "tiny-yolo-4c",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "modelFilePath": "ai/protobuf/tiny-yolo-4c.pb",
      "labelsFilePath": "ai/protobuf/tiny-yolo-4c-labels.txt",
      "lite": false,
      "compressed": false,
      "selected": true
    },
    {
      "name": "tiny-yolo-4c",
      "lite": true,
      "compressed": false,
      "selected": false
    }
  ],
  "testImages": [
    {
      "name": "IMG_6924.jpg",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "filePath": "ai/testimgs/IMG_6924.jpg"
    },
    {
      "name": "IMG_6924.png",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "filePath": "ai/testimgs/IMG_6924.png"
    },
    {
      "name": "IMG_6929.jpg",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "filePath": "ai/testimgs/IMG_6929.jpg"
    },
    {
      "name": "Part1.png",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "filePath": "ai/testimgs/Part1.png"
    },
    {
      "name": "Part1_10.png",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "filePath": "ai/testimgs/Part1_10.png"
    }
  ],
  "parts": [
    {
      "name": "Part1",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "modelFilename": "ai/models/Part1.png",
      "drawingFilename": "ai/drawings/Part1.png",
      "annotationFilename": "ai/annotations/Part1.xml"
    },
    {
      "name": "Part2",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "modelFilename": "ai/models/Part2.png",
      "drawingFilename": "ai/drawings/Part2.png",
      "annotationFilename": "ai/annotations/Part2.xml"
    },
    {
      "name": "Part3",
      "parentFolder": "/data/user/0/com.foviar/files/",
      "modelFilename": "ai/models/Part3.png",
      "drawingFilename": "ai/drawings/Part3.png",
      "annotationFilename": "ai/annotations/Part3.xml"
    }
  ]
}


在react-native应用程序中读取json文件的步骤:-

1. 将其导入到您的组件中

import ASSET_FILE from '../assets/files/asset.json';

// 进口filename from '资产文件的路径';

2.现在在一个函数中

jsonParser(){
    var data = JSON.parse(JSON.stringify(ASSET_FILE));
    var tempProtobuf = []
    var temptestImages= []
    var tempparts= []
    tempProtobuf = data.Protobuf
    temptestImages = data.testImages
    tempparts = data.parts
}

// Now three of your objects are there in tempProtobuf, temptestImages, tempparts array respectively.

如果要在应用程序中显示,请迭代或保存状态。

希望这有帮助...谢谢:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 React-Native-fs 读取 JSON 文件 的相关文章

  • Enzyme 和 React 路由器:如何使用 useHistory 浅层渲染组件

    我一直在尝试用以下方式渲染组件shallow 由enzyme 该组件正在使用useHistory from react router dom const baseMatch match lt id string gt path url pa
  • 找不到 com.mapbox.mapboxsdk:mapbox-android-accounts:0.7.0。全新安装 MapBox

    我建立了一个新的反应本机项目并添加了 Mapboxyarn add react native mapbox gl maps This 请注意 如果您使用默认的 Mapbox Android SDK 包含在此库中 并且使用较新的 Androi
  • REACT NATIVE 从本地 MySQL 数据库检索数据

    我正在用 React Native 编写一个应用程序 并且创建了一个 MySQL 数据库来存储我的信息 但我想知道是否可以使用 axios 或 fetch 与我的数据库交互 因为它是本地的并且没有 HTTP 地址然而 我觉得我以前能够做到这
  • 如何在 ReactJs 中使用 Hooks useState 编写多行状态

    React 16 9 我知道这class component state class JustAnotherCounter extends Component state count 0 相当于使用Hooks useState functi
  • 重构 withState 如何更新 props 更改

    我有一个更高阶的组件 我尝试对其进行一些修改 我不熟悉重组 这就是我的组件
  • React Native 循环这个

    当我把onPress在地图循环中 它不起作用 如何修复它 var PageOne React createClass handlePress this props navigator push id 2 render return
  • 将 React 与 ejs 结合使用?

    我有一个使用 React 状态构建的前端 旨在根据用户操作进行调整 然而 我的前端 React 也旨在显示并允许操作我的服务器端数据 目前我的视图引擎是EJS 我用它来显示数据 举一个广泛的例子 return div class col m
  • 如何使用 Typescript 从 mui 扩展调色板

    我正在尝试扩展 mui 提供的调色板 覆盖主色 次要颜色等效果很好 但如果我想在之后创建一组自定义颜色 我不知道如何使其工作 有很多没有打字稿的例子 但是当这个人进入游戏时 事情就变得更加棘手 假设我有这个 主题 tsx palette p
  • 如何将 Content-Type 更改为 application/json React

    我正在使用 axios 从 api 获取内容 我想使用 axios 在 React 中将 Content Type 设置为 application json 需要纠正什么 下面是参考代码 const config headers Conte
  • 如何过滤javascript对象数组

    我有两个数组 我正在使用 PubSidebar 过滤基于 groupKey 的内容 let groupKey oaDeal Journals Deposit This array of object will be filtering wi
  • 无法导入@material-ui/core/styles/MuiThemeProvider

    我正在开发一个 React 项目 使用 Material UI React 组件 我想进口MuiThemeProvider in src index js像这样import MuiThemeProvider from material ui
  • 如何删除默认的故事书画布样式?

    Storybook 将默认样式应用于故事画布 iframe 这使得我的故事无法呈现应有的样子 如何摆脱 Storybook 的默认样式 例如 这是默认样式h2元素 通过 Storybook 的 page css 那个的来源page css
  • React Native + Jest EMFILE:打开文件太多错误

    我正在尝试运行 Jest 测试 但收到以下错误 读取文件时出错 Users mike dev react TestTest node modules react native node modules yeoman environment
  • 将react-query 测试与testing-library 集成

    Aim 我正在构建一个使用 React query 来获取数据的 NextJS 应用程序 我现在正在尝试实现一个测试框架 然而 当我跑步时yarn test我收到以下错误 从反应查询文档中 我了解到该错误通常与以下情况有关
  • React:未终止的 JSX 内容

    为什么我会收到错误消息Unterminated JSX contents为闭幕式div 元素 我究竟做错了什么 export default class Search extends Component render return div
  • 带有 React 的 Google Analytics 无法正常工作

    我在我的反应项目中使用谷歌分析 即使我在线 它也不会显示任何活跃用户 我尝试过在网上找到的不同方法 但似乎都不起作用 我只在本地主机上尝试过 而不是在已部署的网站上尝试过 但我认为它应该仍然有效 这是我的代码 我的应用程序 js impor
  • 如何让material-ui文本字段中的标签位于右侧?

    我在用着material ui and typescript对于我的 React 项目 rtl 布局 我不知道如何将文本字段的标签放在右侧 找到了更好的方法without外部库 export const theme createTheme
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • 在 React Native 中集成 Stack、Drawer 和 Tab Navigator

    我尝试在一个项目中一起实现 Stack Drawer 和 Tab Navigator 但它没有达到我的预期 首先 创建选项卡导航器 一个是 主页 另一个是 职业 接下来 创建 Stack Navigator 并将抽屉集成到 Navigati
  • 如何使用反应本机在数字键盘上添加“完成”按钮

    我在react native中使用数字键盘 我想在单击完成按钮时隐藏键盘 因为我想在键盘上方添加完成按钮 是否有可能像IOS应用程序一样隐藏键盘 任何帮助非常感激 我不确定这是否正是您想要的 但您可以使用 prop returnKeyTyp

随机推荐

  • NSFileHandle writeData:异常处理

    这可能是一个相当广泛的问题 但我找不到任何在线资源来解决或解释这个问题 问题是创建后NSFileHandle writer NSFileHandle fileHandleForWritingAtPath path 当你使用 writer w
  • Pandas.DataFrame interpolate() 方法='线性'和'最近'返回尾随 NaN 不一致的结果

    我在探索pandas DataFrame interpolate 用不同的方法 linear vs nearest 当尾部缺少数据时 我发现这两种方法的输出不同 例如 import pandas as pd version 0 16 2 o
  • Ruby on Rails 3:如何分别检索 POST 和 GET 参数?

    我知道你可以使用获取参数params 但问题是它合并了所有参数 无论它们是通过GET or POST 如果您通过以下方式发送请求GET 没问题 参数只能挤在URL里 但如果你发送一个POST具有类似 URL 的请求 blabla foo b
  • Puppeteer 无法在谷歌云功能中工作

    Puppeteer 无法在谷歌云中工作 镀铬错误如图所示 我已经在这里实施了该建议 Heroku 上的 Puppeteer 错误 找不到 Chromium https stackoverflow com questions 74385208
  • 致命信号11(和引擎项目)

    我正在创建由 andengine 框架提供支持的 android 游戏 box2d 扩展我收到 致命信号 11 这似乎是突然发生的 我想你可以随机称呼它 没有任何线索 至少 我不知道有任何线索可以帮助我解决这个问题 我的猜测是 1 我正在使
  • ASP.Net MVC 部分视图保持其模型状态?

    这可能又是一个新手问题 当我创建 ASP NET MVC2 应用程序时 会创建一个具有操作登录的帐户控制器 如下所示 HttpPost public ActionResult LogOn LogOnModel model string re
  • Laravel - 重定向到页面并滚动到页面底部

    我使用 Laravel 框架 在我的控制器中我有 return Redirect route home 这是重定向到主页 但我想实现页面在重定向时向下滚动以查看页脚 就像是href home footer 有办法吗 您可以生成路由的 URL
  • 如何在Python中一次读取一个字符串中的一个字母

    我需要将用户输入的字符串转换为莫尔斯电码 我们的教授希望我们这样做的方法是从 morseCode txt 文件中读取 将 morseCode 中的字母分成两个列表 然后将每个字母转换为莫尔斯电码 当有空格时插入新行 我有开始 它的作用是读取
  • 解析 Roslyn 中的嵌入表达式

    我正在尝试为类似 QML 的标记语言编写一个解析器 并且我希望允许在标记中使用 C 表达式 因此 一个示例可能如下所示 ClassName Property1 10 Property2 Math Sqrt 123 Property3 str
  • 如何通过 Rails 导入地图使用刺激组件

    我想将此刺激组件包含到我全新的 Rails 7 应用程序中 https www stimulus components com docs stimulus dropdown https www stimulus components com
  • 有没有办法让VS2010发布向导在发布网站时复制App_offline.htm?

    看到后汉塞尔曼 你做错了 视频 http www hanselman com blog WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong aspx我开始使用网络发布 htt
  • 有没有办法重命名已部署的 ClickOnce 应用程序?

    我的公司有一个 ClickOnce 应用程序 我们的客户已经使用该应用程序大约一年了 我们正在进行品牌重塑 并希望更改应用程序的名称 但是 仅更改 Visual Studio 中的所有正常名称选项 然后构建新的部署显然会更改现有应用程序正在
  • 在 Azure Pipelines 构建中使用 Azure Repos git 模块源进行身份验证

    我目前正在为 Azure DevOps 创建一个管道 以验证 Terraform 配置并将其应用到不同的订阅 我的 terraform 配置使用模块 这些模块 托管 在与 terraform 配置相同的 Azure DevOps 项目中的其
  • RGBA格式HEX转换成RGB格式HEX? PHP

    我想在 RGBA 格式的十六进制颜色之间来回转换 例如0xFF0000FF 和 RGB 格式的十六进制颜色 例如0xFF0000 在 PHP 中 我怎样才能做到这一点 这两个函数将满足您的需要 function rgbaToRgb rgba
  • MongoError:池正在耗尽,在集成测试中使用 MongoMemoryServer 时禁止新操作

    我在用着MongoMemoryServer编写集成测试 我有两个集成测试文件 当我运行 IT 测试时 我看到以下内容 我不明白为什么 我正在使用 jestjs 测试框架 当我有两个 IT 测试文件时 我看到以下错误 MongoError p
  • Windows 相当于 Mac OS X“打开”命令

    刘畅在这里问了一个与此非常相似的问题 Linux 相当于 Mac OS X 打开 命令 https stackoverflow com questions 264395 linux equivalent of the mac os x op
  • C#中如何终止线程?

    我想尝试使用 C 进行线程处理 我了解一些有关 C 线程处理的知识 所以我只是想问我是否想终止一个线程 我应该这样做smt Abort 或者函数结束后它会 自杀 另外 有没有类似的东西pthread exit 在 C 中 在 C 中 Thr
  • 如何在 C++ MPI 代码中放置检查点?

    根据容错系统 https www elsevier com books fault tolerant systems koren 978 0 12 088525 1 第 6 章 由 Israel Koren 和 C Mani Krishna
  • String类中的线程安全

    使用局部变量构建字符串是否是线程安全的String像下面的方法中的类 假设从多个线程调用以下方法 public static string WriteResult int value string name return string Fo
  • 如何使用 React-Native-fs 读取 JSON 文件

    我有一个包含内容的 asset json 文件 需要在反应本机应用程序中读取它 我已经认为它必须手动复制到本机实现 并且我可以验证文件是否存在 并且可读 rw r r 由于它在那里并且我正在使用承诺来获取它 请告诉我输出何时仍然 40 0