how to add data to li for wp_nav_menu?

You have at least three options, depending on how extensive your demands are:

  1. There is a filter towards the end of wp_nav_menu that lets you change the function’s output. If the menu is fixed you could use this to do a simple find and replace on the html-string. This is an easy solution, but if you change your menu, you have to change the function.
  2. A bit more complicated is replacing the whole generation process of wp_nav_menu with a custom walker that generates the data-elements from information you can pull out of existing information from the admin menu page. This is what you seem to have in mind.
  3. The most complicated approach would be to add a metabox to the admin menu page, which would allow you to add different data-items for every menu item. You would then still need a walker function as well. Probably not worth the effort.